2014-02-06 144 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