Railsでは、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
ミクの答え を試したところ、次のエラーが発生しました:
Django.core.exceptions.AppRegistryNotReady:アプリはまだ読み込まれていません。
問題は_urls.py
_でDjango.contrib.admin.autodiscover()
を使用していることが原因のようです。そのため、コメントアウトするか、URLをダンプする前にDjangoを正しくロードすることができます。もちろん、マッピングに管理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名は表示されません。