Shell llama a inversa (como se mencionó anteriormente) son muy buenos para depurar estos problemas, pero hay dos condiciones fundamentales:
- que necesidad argumentos de suministro que coincida con lo que los argumentos de las necesidades de visión,
- estos argumentos deben coincidir con los patrones de expresiones regulares.
sí, es lógico. Sí, también es confuso porque inversa sólo habrá emitir la excepción y no le dará ninguna pista más.
Un ejemplo de patrón de URL:
url(r'^cookies/(?P<hostname>[^/]+)/(?P<url_id>\d+)/$', 'register_site.views.show_cookies', name='show_cookies'),
Y luego lo que sucede en la shell:
>>> from register_site.views import show_cookies
>>> reverse(show_cookies)
NoReverseMatch: Reverse for 'register_site.views.show_cookies' with arguments '()' and keyword arguments '{}' not found.
No funciona porque proporciona parámetro.
>>> reverse('show_cookies', kwargs={'url_id':123,'hostname': 'aaa'})
'/cookies/aaa/123'
Ahora funcionó, pero ...
>>> reverse('show_cookies', kwargs={'url_id':'x','hostname': 'www.dupa.com'})
NoReverseMatch: Reverse for 'show_cookies' with arguments '()' and keyword arguments '{'url_id': 'x', 'hostname': 'www.dupa.com'}' not found.
Ahora no funcionó debido a URL_ID no coincide con la expresión regular (numérico, cadena suministrada esperado).
Puede utilizar inversa con ambos argumentos posicionales y los argumentos de palabras clave. La sintaxis es la siguiente:
reverse(viewname, urlconf=None, args=None, kwargs=None, prefix=None, current_app=None)
Como se trata de la etiqueta de plantilla url, hay algo gracioso al respecto. Django documentation da ejemplo del uso de nombre de vista citado:
{% url 'news.views.year_archive' yearvar %}
Así que lo usaron de manera similar en mi plantilla HTML:
{% url 'show_cookies' hostname=u.hostname url_id=u.pk %}
Pero esto no funcionó para mí. Pero el mensaje de excepción me dio una pista de lo que podría estar equivocado - en cuenta las comillas simples alrededor de la vista Nombre:
Reverse for ''show_cookies'' with arguments...
Comenzó a trabajar cuando quitado las comillas:
{% url show_cookies hostname=u.hostname url_id=u.pk %}
Y es confuso.
¿puede mostrar definiciones de lcd_screen_size y filter_by_led url? –
ya que la marcha atrás funcionó en el caparazón ... probablemente sea otra cosa la que causa el problema. Obtuve algunos errores inversos bastante extraños, parece que CUALQUIER definición de URL incorrecta en cualquier lugar de tu proyecto puede estropear todo:/ – Jiaaro