如何在Django模板中选择随机图像?

时间:2018-03-23 21:19:42

标签: html django django-templates

我目前在Django模板中有一个图像,我想在每次加载页面时随机选择:

--disable-sse2

我为此目的在Github上找到了一些自定义过滤器(例如random_image),但在我看来,使用内置标签应该是可行的,特别是{{3过滤。

这就像是

        <!--<img src="{% static 'images/640px-Waaah.jpg' %}"/>-->
        <img src="{% static 'images/Crying_Baby.jpg' %}"/>

但我不相信这是有效的DTL语法。知道怎么回事吗?

(顺便说一句,该页面是Django的默认random并且没有传递任何上下文,所以我更愿意通过将婴儿图像列表传递给上下文来实现。

2 个答案:

答案 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;图像。