En mi archivo urls.py
, que tienen:¿Cómo uso django.core.urlresolvers.reverse con una referencia de función en lugar de un patrón de URL con nombre?
from myapp import views
...
(r'^categories/$', views.categories)
Dónde categories
es una función de vista en el interior myapp/views.py
. Ninguna otra línea de URLconf hace referencia al views.categories
.
En un archivo de prueba unitaria, estoy tratando de obtener esta URL usando django.core.urlresolvers.reverse()
, en lugar de simplemente copiar '/ categories /' (DRY y todo eso). Por lo tanto, tengo:
from django.core.urlresolvers import reverse
from myapp import views
...
url = reverse(views.categories)
Cuando ejecuto mis pruebas, me sale un error de NoReverseMatch
:
NoReverseMatch: Reverse for '<function categories at 0x1082f30>' with arguments '()' and keyword arguments '{}' not found.
Se coincide muy bien si hago el patrón de URL de un patrón llamado, así:
url(r'^categories/$', views.categories, 'myapp-categories')
Y utilizar el nombre del patrón de igualar:
url = reverse('myapp-categories')
Pero por lo que puedo decir de the reverse
documentation, no debería necesitar convertirlo en un patrón de URL con nombre solo para usar reverse
.
¿Alguna idea de lo que estoy haciendo mal?
La documentación inversa indica que debe usar URL con nombre o pasar el nombre de la función utilizada en su URLconf, y se puede pasar como una cadena.Por lo tanto, conviértalo en una URL con nombre o usa "views.categories". – camflan
La última documentación dice que el nombre de la vista es "una referencia de función o la versión de cadena del nombre", por lo que no debería ser una cadena: –