Django {% url%} cuando urls con parámetros como: url (r ‘^ foo / / $’, include (some.urls))

No encuentro ninguna solución, cómo obtener la url en la plantilla con la siguiente configuración (usando Django1.3):

urls.py

urlpatterns = patterns('', url(r'^/foo/(?P\d+)/$', include('bar.urls'), name='foo-url'), ) 

Incluido url-conf:

bar.urls.py

 urlpatterns = patterns('', (r'^/bar/$', 'bar.views.index'), url(r'^/bar/(?P\d+)/$', 'bar.views.detail', name='bar-url'), ) 

bar.views.py

 def detail(request, parameter, parameter2): obj1 = Foo.objects.get(id=parameter) obj2 = Bar.objects.get(id=parameter2) 

Ahora trato de obtener la url en la plantilla con:

 {% url bar-url parameter=1 parameter2=2 %} 

Espero obtener: / bar / 1 / foo / 2 /

¿Es posible usar en este caso el {% url%}?

Sí, puedes obtener tu url así: –

 {% url 'bar-url' 1 2 %} 

Pero tenga en cuenta que la configuración de su url debería ser así:

urls.py

 urlpatterns = patterns('', url(r'^/foo/(?P\d+)/, include('bar.urls')), ) 

bar.urls.py

 urlpatterns = patterns('', (r'^/bar/$, 'bar.views.index'), url(r'^/bar/(?P\d+)/$, 'bar.views.detail', name='bar-url'), ) 

No hay foo-url menos que específicamente asignes:

urls.py

 urlpatterns = patterns('', url(r'^/foo/(?P\d+)/$, 'another.views.foo', name='foo'), url(r'^/foo/(?P\d+)/, include('bar.urls')), ) 

Tenga en cuenta que $ significa el final de la expresión regular.

Bueno, normalmente configuro el espacio de nombres para las URL incluidas para simplificar el proceso:

en la raíz urlpatterns

url (r ‘^ articles /’, include (‘articles.urls’, namespace = ‘articles’)),

en articulos / urls.py

url (r ‘^ (\ d +) / $’, ‘leer’, nombre = ‘leer’),

url (r ‘^ publish / $’, ‘publish’, name = ‘publish’),

Y luego en su plantilla puede simplemente escribir:

{% url artículos: leer 1%}

o

{% url artículos: publicar%}

Más sobre esto aquí .