que tienen URLs como http://example.com/depict?smiles=CO&width=200&height=200 (y con varios otros argumentos opcionales)¿Cómo construyo un Django reverse/url usando query args?
Mi urls.py contiene:
urlpatterns = patterns('',
(r'^$', 'cansmi.index'),
(r'^cansmi$', 'cansmi.cansmi'),
url(r'^depict$', cyclops.django.depict, name="cyclops-depict"),
puedo ir a esa URL y obtener el PNG de 200x200 que se construyó, por lo que sé esa parte funciona
En mi plantilla de la respuesta "cansmi.cansmi" quiero construir una URL para la plantilla con nombre "cyclops-represente" dado algunos parámetros de consulta. Pensé que podía hacer
{% url cyclops-depict smiles=input_smiles width=200 height=200 %}
donde "input_smiles" es una entrada a la plantilla a través de un envío del formulario. En este caso, es la cadena "CO" y pensé que crearía una URL como la de arriba.
Esta plantilla falla con un TemplateSyntaxError:
Caught an exception while rendering: Reverse for 'cyclops-depict' with arguments '()' and keyword arguments '{'smiles': u'CO', 'height': 200, 'width': 200}' not found.
Este es un mensaje de error bastante común tanto aquí en StackOverflow y en otros lugares. En todos los casos que encontré, la gente los usaba con parámetros en la expresión regular de la ruta URL, que no es el caso en el que los parámetros entran en la consulta.
Eso significa que lo estoy haciendo mal. ¿Cómo lo hago bien? Es decir, quiero construir la URL completa, incluidos los parámetros de ruta y consulta, usando algo en la plantilla.
Como referencia,
% python manage.py shell
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.core.urlresolvers import reverse
>>> reverse("cyclops-depict", kwargs=dict())
'/depict'
>>> reverse("cyclops-depict", kwargs=dict(smiles="CO"))
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Library/Python/2.6/site-packages/django/core/urlresolvers.py", line 356, in reverse
*args, **kwargs)))
File "/Library/Python/2.6/site-packages/django/core/urlresolvers.py", line 302, in reverse
"arguments '%s' not found." % (lookup_view_s, args, kwargs))
NoReverseMatch: Reverse for 'cyclops-depict' with arguments '()' and keyword arguments '{'smiles': 'CO'}' not found.
creé una solicitud de función: https://code.djangoproject.com/ticket/25582 – guettli