2013-12-16 21 views
5

url` yerleşik etiketi `dize tartışma içine bir değişken genişletmek için nasıl: Eğer name görebileceğiniz gibiDjango şablonları: Aşağıdaki şablonu pasajı çalışması yapmaya çalışıyorum

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

bir değişkendir url yerleşik etiketine iletmeden önce dizeye genişletmem gerekiyor. Aşağıdaki istisna içinde

Maalesef yukarıda belirtilen şablonu pasajı sonuçları:

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

bunu başarmak için nasıl bir fikir veya alternatif yöntemler?

cevap

2
Kodunuz> = 1.4 (iirc) Django için çalışmalıdır

- varsayarak name geçerli bir url adına giderir ve bu URL'nin args veya kwargs'a ihtiyacı yoktur. Django 1.3x için bunun çalışması için şablonunuza {% load url from future %} eklemeniz gerek. Django < 1.3 için şansınız yok (iyi, özel bir etiket yazmanız gerekecek) - ancak kodunuzu yine de taşımayı düşünmelisiniz.

+0

Aradığım cevap bu. İşe yarıyor! Teşekkürler! :) (django 1.3.7 kullanıyorum) – fstab

3

Değişkeni {% url %} şablon etiketine geçirebilirsiniz. name geçerli bir urlpattern adı ise, bu kod parçasının çalışması gerekir. Geçerli bir URLPATTERN isme name dönüştürmek gerekiyorsa

, böyle, özel filtre kullanarak bunu yapabilirsiniz:

{% url name|my_filter %} 
+0

Cevabınız için teşekkürler. Sadece django url çözümleyici işlevini çağıran özel bir filtrenin oluşturulması biraz fazla gibi görünüyor; bu yüzden şablon içinde bir çözüm olmasını umuyordum. Bu arada – fstab

+0

, 'name' zaten geçerli bir urlpattern adı içeriyor. – fstab

+1

@niekas: Gönderdiğiniz örnek sözdizimi, etiketler değil filtreler içindir. –