/ / django шаблони: как да разгънете променлива в низовия аргумент за вградения маркер `url` - python, django, шаблони, django-шаблони

django шаблони: как да разгънете променлива в аргумент на струните за вградения маркер `url` - python, django, шаблони, django шаблони

Опитвам се да направя следния шаблон фрагмент работа:

<ul>
{% for name,label in entries.items %}
<li><a href="{% url name %}">{{ label }}</a></li>
{% endfor %}
</ul>

Както виждаш name е променлива, която трябва да разширя в низ, преди да я предам на url вграден етикет.

За съжаление гореспоменатият шаблонен фрагмент води до следното изключение:

Exception Type: TemplateSyntaxError
Exception Value:
Caught NoReverseMatch while rendering: Reverse for "name" with arguments "()" and keyword arguments "{}" not found.

Някакви идеи или алтернативни методи за това как да се постигне това?

Отговори:

2 за отговор № 1

Кодът ви трябва да работи за Django> = 1.4 (iirc) - ако приемем name решава за валидно име на URL адреса и този url няма нужда от арги или kwargs.За Django 1.3x трябва да добавите {% load url from future %} към вашия шаблон, за да работи това. За django <1.3 вие нямате късмет (добре, ще трябва да напишете персонализиран етикет) - но би трябвало да обмислите прехвърлянето на кода си така или иначе.


3 за отговор № 2

Можете да преминете към променлива {% url %} templatetag. ако name е валидно име на urlpattern този фрагмент трябва да работи.

Ако трябва да конвертирате name към валидно име на urlpattern, можете да го направите, като използвате персонализиран филтър, като следното:

{% url name|my_filter %}