2010-01-19 19 views
24

In rotaie, in grado di mostrare i percorsi attivi con rastrello (http://guides.rubyonrails.org/routing.html):Esiste qualcosa di simile a "rake routes" in 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"} 

C'è un comando/strumento simile per Django esempio mostra la il pattern URL, il nome del pattern (se presente) e la funzione associata nelle viste?

risposta

1

admindocs ha una funzionalità simile. Ma non mostra i nomi degli URL.

4

Un esperimento ...

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

Ora, se si corre 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

Quando ho provato miku's answer, ho avuto questo errore:

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

Sembra che il problema derivi dall'uso di django.contrib.admin.autodiscover() nel mio urls.py, quindi posso commentarlo o caricare Django correttamente prima di scaricare l'URL. Ovviamente se voglio vedere l'URL dell'amministratore nella mappatura, non posso commentarli.

Il modo in cui ho trovato era creare uno custom management command che scarica gli 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) 
Problemi correlati