django模板中的变量图像

时间:2017-06-29 11:02:37

标签: python django

我是Django的新手,我想知道实现这一目标的最佳途径是什么。

我在静态文件夹中保存了大量(15K +)的图像,我希望在网页上一次显示3个。

我的尝试:

我可以在模板中对名称进行硬编码,如下所示:

<div id="imageholder">
    <img src="{% static "images/im1.jpg" %}" />
    <img src="{% static "images/im2.jpg" %}" />
    <img src="{% static "images/im3.jpg" %}" />
</div>

但这当然不是15k +图像的选择。我想过用jQuery来改变函数中的名字。

例如:

<div id="imageholder">
</div>
<script>   
    names = ['im1','im2','im3']
    for (i = 0; i < names.length; i++) { 
        html = `<img src="{% static "images/${names[i]}" %}" />`
        $('#imageholder').append(html)
    }
</script>

我相信这会有效,但它要求我列出我没有的所有名字。我想也许我可以使用os.listdir(),但我不知道如何进入网页。

3 个答案:

答案 0 :(得分:3)

在您的视图中,将列表添加到上下文中:

images = os.listdir("path/to/images") #Can use glob as well
context = {'images': images}
return render(request,'/path/to/template',context}

在模板中:

{% for image in images %}
     {% with 'path/to/imagedir/'|add:image as imagePath %}
     <img src='{% static imagePath %}' />
     {% endwith %}
{% endfor %}

答案 1 :(得分:1)

您可以在上下文中预生成images/imN.jpg个字符串的迭代,并在模板中迭代它。

class MyView(TemplateView):
    ...
    def get_context_data(self, **kwargs):
        ctx = super(MyView, self).get_context_data(**kwargs)
        ctx['names'] = ('images/im{}.jpg'.format(i) for i in range(100))
        return ctx
    ...

<div id="imageholder">
{% for name in names %}
    <img src="{% static name %}" />
{% endfor %}
</div>

答案 2 :(得分:1)

在特定视图功能中,您要将图像发送到模板

import os 
images = os.listdir('/path_to_static')
return render(request,'template.html',{'images':images})

在模板中:

{% for img in images %}
<img src="{% static 'img' %}">
{% endfor %}