Ich versuche, das folgende Template-Snippet zum Laufen zu bringen:
<ul>
{% for name,label in entries.items %}
<li><a href="{% url name %}">{{ label }}</a></li>
{% endfor %}
</ul>
Wie du siehst name
ist eine Variable, die ich in eine Zeichenfolge expandieren muss, bevor ich sie an die übergebe url
eingebauter Tag.
Leider hat das oben genannte Template-Snippet die folgende Ausnahme zur Folge:
Exception Type: TemplateSyntaxError
Exception Value:
Caught NoReverseMatch while rendering: Reverse for "name" with arguments "()" and keyword arguments "{}" not found.
Irgendwelche Ideen oder alternative Methoden, um dies zu erreichen?
Antworten:
2 für die Antwort № 1Dein Code sollte für Django> = 1.4 (iirc) funktionieren - vorausgesetzt name
wird in einen gültigen URL-Namen aufgelöst und diese URL benötigt weder Args noch Kwargs. Für Django 1.3x müssen Sie hinzufügen {% load url from future %}
zu Ihrer Vorlage, damit dies funktioniert. Für Django <1.3 haben Sie Pech (nun, Sie müssen ein benutzerdefiniertes Tag schreiben) - aber Sie sollten möglicherweise in Betracht ziehen, Ihren Code trotzdem zu portieren.
3 für die Antwort № 2
Sie können Variable an übergeben {% url %}
templatetag. Ob name
ist ein gültiger URL-Mustername, den dieses Snippet verwenden soll.
Wenn Sie konvertieren müssen name
Um einen gültigen URL-Musternamen zu erhalten, können Sie einen benutzerdefinierten Filter wie diesen verwenden:
{% url name|my_filter %}