/ / django templates: como expandir uma variável no argumento string para a tag interna `url` - python, django, templates, django-templates

templates do django: como expandir uma variável para o argumento string da tag interna `url` - python, django, templates, django-templates

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 № 1

Seu 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 %}