我目前在Django模板中有一个图像,我想在每次加载页面时随机选择:
--disable-sse2
我为此目的在Github上找到了一些自定义过滤器(例如random_image
),但在我看来,使用内置标签应该是可行的,特别是{{3过滤。
这就像是
<!--<img src="{% static 'images/640px-Waaah.jpg' %}"/>-->
<img src="{% static 'images/Crying_Baby.jpg' %}"/>
但我不相信这是有效的DTL语法。知道怎么回事吗?
(顺便说一句,该页面是Django的默认random
并且没有传递任何上下文,所以我更愿意通过将婴儿图像列表传递给上下文来实现。
答案 0 :(得分:3)
正如你所说,Django不允许你在模板中定义列表。
您可以使用逗号分隔值的字符串并编写自定义标记my_random
,它会拆分字符串并选择其中一个值:
{% with "image1.jpg,image2.jpg"|my_random as image%}
或者您只需撰写split
代码并将结果传递给内置的random
代码。
{% with "image1.jpg,image2.jpg"|split:","|random as image %}
答案 1 :(得分:3)
我会通过编写一个从选择中返回随机图像的标记来接近它:
import random
from django import template
from django.conf import settings
register = template.Library()
@register.simple_tag
def random_image():
choices = getattr(settings,
RANDOM_IMAGE_LIST,
['http://thecatapi.com/api/images/get?format=src&type=png'])
return random.choice(choices)
在模板中执行此操作的优点主要是重用,并且更容易更改选择,因为您只需要在一个地方执行,而不是寻找模板。
我从settings.py
中的配置变量中提取了一些列表来增强它,如果没有设置它将使用&#34;默认&#34;图像。