2012-04-27 13 views
8

No sé si este SO question es del mismo problema que estoy a punto de describir, pero sí comparte los mismos síntomas. Lamentablemente, todavía no se ha resuelto mientras escribo.{% url%} me da error NoReverseMatch mientras reverse() devuelve la URL muy bien. ¿Por qué?

Así que aquí está mi problema. Estoy tratando de agregar el django-registration app de James Bennett a mi proyecto django. Ya casi terminé de configurarlo según mis necesidades: plantillas personalizadas y URL. Justo cuando pensaba que todo estaba bien para ir. Obtuve el error NoReverseMatch usando {% url 'testing' item_id=123 %} (también intenté usar el nombre de vista, myapp.views.test, pero no tuve suerte) en una de las plantillas personalizadas requeridas por django-registration. Curiosamente, probé reverse('testing', kwargs={'item_id':123}) en el intérprete de comandos y la URL fue devuelta muy bien. Pensé que {% url %} usa reverse() en el back-end, pero ¿por qué obtuve resultados diferentes?

urls.py: (la URLconf de mi sitio web)

urlpatterns = patterns('myapp.views', 
    url(r'^test/(?P<item_id>\d+)/$', 'test', name='testing'), 
) 

activation_email.txt:. (dicha plantilla Tenga en cuenta que es intencionadamente en .txt extensión como es requerido por django-registro y que no deben ser la causa del problema.)

{% comment %}Used to generate the body of the activation email.{% endcomment %} 
Welcome to {{ site }}! Please activate your account by clicking on the following link: 

{% url 'testing' item_id=123 %} 

Note the activation link/code will be expired in {{ expiration_days }} days. 

no sé si es importante, pero sólo pensé que debería mencionar activation_email.txt se almacena en el directorio plantillas de myapp aunque es utilizado por django-registration.

Además, estoy usando Django 1.4

Tengo la sensación de que el problema tiene algo que ver con los espacios de nombres de URL, un tema que nunca he entendido, pero es sólo una suposición ingenua. (IMO, la documentación de django es excelente para explicar todo sobre django, excepto cuando se trata de espacios de nombres url)

Respuesta

12

No soy un experto aquí, pero en un proyecto de Django estoy trabajando en el momento en que uso el nombre de la url sin comillas Acabo de agregar comillas alrededor de una línea similar en una de mis plantillas y produjo el mismo error que tu error.

Probar:

{% url testing item_id=123 %} 
+1

Interesante ~ que funciona !! Muchas gracias. Pero, ¿cuál es la razón detrás de esto? Quiero decir que todos los ejemplos de '{% url%}' en los documentos de django usan comillas. – tamakisquare

+0

Verifique la sección urls nombradas de los documentos: https://docs.djangoproject.com/en/dev/topics/http/urls/#naming-url-patterns Por lo que puedo decir, si está usando etiquetas URL con una ruta real a la vista, entonces necesita las comillas. Si usa un nombre, no lo hace. – John

+2

Gracias por la referencia. En el documento de etiquetas de plantilla, hay un ejemplo '{% url 'myapp: view-name'%}', así que pensé que se necesitaban cómputos para usar el nombre de vista. Supongo que eso solo se aplica cuando uso el nombre de vista junto con el espacio de nombres, lo cual es un poco confuso. – tamakisquare

Cuestiones relacionadas