2010-01-19 51 views
24

在導軌上可顯示與耙激活路由(http://guides.rubyonrails.org/routing.html):有類似Django的「耙路線」的東西嗎?

$ 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模式,模式名稱(如果有)以及視圖中的相關函數?

回答

4

的實驗......

# 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 
2

當我試圖miku's answer,我這個錯誤:

django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

看起來問題來自我在urls.py中使用django.contrib.admin.autodiscover(),所以我可以註釋掉或在轉儲URL之前正確加載Django。當然,如果我想在映射中看到管理網址,我不能評論它們。

我發現的方法是創建一個custom management command轉儲的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) 
相關問題