2010-01-19 23 views
24

En los carriles, en puede mostrar las rutas activas con el rastrillo (http://guides.rubyonrails.org/routing.html):¿Hay algo similar a 'rutas de rake' en 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"} 

¿Existe una herramienta/comando similar para django que muestran el ejemplo el patrón de URL, el nombre del patrón (si lo hay) y la función asociada en las vistas?

Respuesta

1

admindocs tiene una característica similar. Pero no muestra nombres de URL.

4

un experimento ...

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

Ahora, si uno 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

Cuando traté miku's answer, llegué este error:

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

Parece que el problema proviene del uso de django.contrib.admin.autodiscover() en mi urls.py, por lo que puedo comentarlo o cargar Django correctamente antes de eliminar las URL. Por supuesto, si quiero ver las URL de administrador en la asignación, no puedo comentarlas.

La manera que encontré fue crear un custom management command que vuelca las direcciones 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) 
Cuestiones relacionadas