2014-02-06 146 views
0

在我的Django的模板,因爲我通過對象的列表進行迭代,我想有一個列表項說:顯示在Django模板隨機對象

<li><a href="{{ obj.green_link }}">Blah</a></li> 

,然後又做:

<li><a href="{{ obj.blue_link }}">Blah</a></li> 

我看到了價值|隨機作爲一個選項,但由於某種原因,這不起作用:

{% ifequal [1, 2]|random 1 %} 
    <a href="{{ post.adfly_url }}">{{ post.title }}</a> 

{% else %} 
    <a href="{{ post.url }}">{{ post.title }}</a> 

{% endifequal %} 

這樣做會引發ŧ他的錯誤:

u'ifequal' takes two arguments 

有沒有什麼辦法可以做到這一點?我認爲它應該很簡單,但我意識到Django模板語言不允許進行變量賦值。

謝謝!

回答

1

您不能像這樣將模板直接放入模板中,make_list就是您要做的。

make_list返回一個字符串列表,所以這將工作。

{% if 12|make_list|random == '1' %} 
    <li><a href="{{ obj.green_link }}">Blah</a></li> 
{% else %} 
    <li><a href="{{ obj.blue_link }}">Blah</a></li> 
{% endif %} 
+0

非常感謝,基普。這就是訣竅:) – Harlin

+0

鑑於這段代碼有多醜陋,將其轉化爲快速類功能的最好方法是什麼?它會在模板中縮短嗎? – mikebabcock

+0

我不知道,我估計它可能更醜。但是,是的,你可以 - 可以在你的obj對象上寫一個方法: def random_link(self): return random.choice((self.green_link,self.blue_link)) – Kip