我是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()
,但我不知道如何进入网页。
答案 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 %}