Eu estou tentando fazer o seguinte trecho de modelo:
<ul>
{% for name,label in entries.items %}
<li><a href="{% url name %}">{{ label }}</a></li>
{% endfor %}
</ul>
Como você pode ver name
é uma variável que eu preciso expandir em string antes de passá-lo para o url
tag interna.
Infelizmente, o snippet de modelo mencionado acima resulta na seguinte exceção:
Exception Type: TemplateSyntaxError
Exception Value:
Caught NoReverseMatch while rendering: Reverse for "name" with arguments "()" and keyword arguments "{}" not found.
Alguma idéia ou métodos alternativos sobre como conseguir isso?
Respostas:
2 para resposta № 1Seu código deve funcionar para o Django> = 1.4 (iirc) - assumindo name
resolve para um nome de url válido e esta url não precisa args ou kwargs. Para Django 1.3x você tem que adicionar {% load url from future %}
ao seu modelo para que isso funcione. Para o django <1.3 você está sem sorte (bem, você terá que escrever uma tag customizada) - mas você deve considerar portar seu código mesmo assim.
3 para resposta № 2
Você pode passar variável para {% url %}
templatetag. E se name
é um nome válido de urlpattern que este fragmento deve funcionar.
Se você precisa converter name
para um nome de urlpattern válido, você pode fazer isso usando um filtro personalizado, como este:
{% url name|my_filter %}