/ / django templates: Wie erweitert man eine Variable in das String-Argument für das eingebaute Tag `url` - Python, Django, templates, Django-templates

django templates: Wie man eine Variable in das String-Argument für das eingebaute Tag `url` erweitert - Python, Django, Templates, Django-Templates

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

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