Ответ 1
Найден https://github.com/django-extensions/django-extensions:
$ ./manage.py show_urls
В рельсах on может показывать активные маршруты с rake (http://guides.rubyonrails.org/routing.html):
$ rake routes
users GET /users {:controller=>"users", :action=>"index"}
formatted_users GET /users.:format {:controller=>"users", :action=>"index"}
POST /users {:controller=>"users", :action=>"create"}
POST /users.:format {:controller=>"users", :action=>"create"}
Есть ли подобный инструмент/команда для django, показывающий, например, шаблон URL, имя шаблона (если есть) и связанная с ним функция в представлениях?
Найден https://github.com/django-extensions/django-extensions:
$ ./manage.py show_urls
Эксперимент...
# appended to root urls.py
if __name__ == '__main__':
from django.core.urlresolvers import RegexURLPattern, RegexURLResolver
from django.utils.termcolors import colorize
import os, sys
sys.path.append(os.path.abspath('..'))
os.environ['DJANGO_SETTINGS_MODULE'] = 'ialtr.settings'
def traverse(url_patterns, prefix=''):
for p in url_patterns:
if isinstance(p, RegexURLPattern):
composed = '%s%s' % (prefix, p.regex.pattern)
composed = composed.replace('/^', '/')
print colorize('\t%s' % (composed), fg='green'), '==> ',
try:
sys.stdout.write(colorize('%s.' % p.callback.__module__,
fg='yellow'))
print p.callback.func_name
except:
print p.callback.__class__.__name__
if isinstance(p, RegexURLResolver):
traverse(p.url_patterns, prefix=p.regex.pattern)
traverse(urlpatterns)
Теперь, если вы запустите python urls.py
...
$ python urls.py
^users/activate/complete/$ ==> django.views.generic.simple.direct_to_template
^users/activate/(?P<activation_key>\w+)/$ ==> registration.views.activate
^users/register/$ ==> registration.views.register
^users/register/complete/$ ==> django.views.generic.simple.direct_to_template
^users/register/closed/$ ==> django.views.generic.simple.direct_to_template
^login/$ ==> django.contrib.auth.views.MethodDecoratorAdaptor
^logout/$ ==> django.contrib.auth.views.logout
^password/change/$ ==> django.contrib.auth.views.MethodDecoratorAdaptor
^password/change/done/$ ==> django.contrib.auth.views.password_change_done
^password/reset/$ ==> django.contrib.auth.views.MethodDecoratorAdaptor
^password/reset/confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$ ==> django.contrib.auth.views.password_reset_confirm
^password/reset/complete/$ ==> django.contrib.auth.views.password_reset_complete
^password/reset/done/$ ==> django.contrib.auth.views.password_reset_done
^ialt/applications/$ ==> ialt.views.applications
^static/(?P<path>.*)$ ==> django.views.static.serve
^$ ==> django.views.generic.simple.direct_to_template
^about/ ==> django.views.generic.simple.direct_to_template
Когда я попробовал ответ miku, я получил эту ошибку:
django.core.exceptions.AppRegistryNotReady: приложения еще не загружены.
Похоже, проблема связана с использованием django.contrib.admin.autodiscover()
в моем urls.py
, поэтому я могу либо прокомментировать это, либо загрузить Django должным образом, прежде чем сбросить URL. Конечно, если я хочу видеть URL-адрес администратора в сопоставлении, я не могу их прокомментировать.
Как я нашел, было создано команда пользовательского управления, которая выгружает URL-адреса.
# install this file in mysite/myapp/management/commands/urldump.py
from django.core.management.base import BaseCommand
from kive import urls
class Command(BaseCommand):
help = "Dumps all URL's."
def handle(self, *args, **options):
self.show_urls(urls.urlpatterns)
def show_urls(self, urllist, depth=0):
for entry in urllist:
print ' '.join((" " * depth, entry.regex.pattern,
entry.callback and entry.callback.__module__ or '',
entry.callback and entry.callback.func_name or ''))
if hasattr(entry, 'url_patterns'):
self.show_urls(entry.url_patterns, depth + 1)
admindocs имеет аналогичную функцию. Но он не отображает имена URL.