Опитвам се да направя следния шаблон фрагмент работа:
<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 %}