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

Большое спасибо, Kip. Это сделало трюк :) – Harlin

+0

Учитывая, насколько уродливым является этот фрагмент кода, какой прекрасный способ превратить это в очень быструю функцию класса? И будет ли он короче в шаблоне? – mikebabcock

+0

Я не знаю, я считаю, что это может быть уродливее. Но да, конечно, вы могли бы - возможно, написать метод на объекте obj: def random_link (self): return random.choice ((self.green_link, self.blue_link)) – Kip

Смежные вопросы