2010-01-19 7 views
24

Trong đường ray, trên có thể hiển thị các tuyến đường hoạt động với cào (http://guides.rubyonrails.org/routing.html):Có điều gì đó tương tự như 'các tuyến đường cào' trong django không?

$ 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"} 

Có một công cụ tương tự/lệnh cho django hiển thị ví dụ mẫu URL, tên của mẫu (nếu có) và hàm liên quan trong các khung nhìn?

Trả lời

1

admindocs có tính năng tương tự. Nhưng nó không hiển thị tên URL.

4

Một thí nghiệm ...

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

Bây giờ, nếu một chạy 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

Khi tôi cố gắng miku's answer, tôi đã lỗi này:

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

Có vẻ như sự cố xảy ra khi sử dụng django.contrib.admin.autodiscover() trong số urls.py của mình, vì vậy tôi có thể nhận xét hoặc tải Django đúng cách trước khi bán URL. Tất nhiên nếu tôi muốn xem URL của quản trị viên trong ánh xạ, tôi không thể nhận xét chúng.

Cách tôi tìm thấy là tạo một custom management command để loại bỏ các 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)