我试图遍历数据库计数以在html中插入img,但无法使{static}命令工作。具体来说:
从views.py中导入列表:
queryset = db_imNewChk.objects.exclude(N_tag=u'').order_by("d_Rank")
for p in queryset:
if (p.gp_Email):
if (c_email):
if not("<li><a href=\"#\"><img src=\"{% static '/img/email_icon"+p.gp_Email+".png' %}\" width=\"20%\" style=\"padding: 3px\"></a></li>" in c_email):
c_email.append("<li><a href=\"#\"><img src=\"{% static '/img/email_icon"+p.gp_Email+".png' %}\" width=\"20%\" style=\"padding: 3px\"></a></li>")
else:
c_email.append("<li><a href=\"#\"><img src=\"{% static '/img/email_icon"+p.gp_Email+".png' %}\" width=\"20%\" style=\"padding: 3px\"></a></li>")
...
return render(request, 'exportnews.html', {'table': listExport, 'table2': listExport1, 'table_count': q_size, 'count_email' : sorted(c_email)})
然后在django模板中exportnews.html:
{% load static %}
<td style="width:350px;height:80px;" rowspan="3" colspan="2">
<ul class="images">
{% for field in count_email %}
{{field|safe}}
{% endfor %}
</ul></td>
我想要实现的是这样的:
<li><a href="#"><img src="http://127.0.0.1:8000/static/img/email_icon1.png' %}" width="20%" style="padding: 3px"></a></li>
<li><a href="#"><img src="http://127.0.0.1:8000/static/img/email_icon2.png' %}" width="20%" style="padding: 3px"></a></li>
<li><a href="#"><img src="http://127.0.0.1:8000/static/img/email_icon3.png' %}" width="20%" style="padding: 3px"></a></li>
但是,渲染的html代码是这样的:
<li><a href="#"><img src="{% static '/img/email_icon1.png' %}" width="20%" style="padding: 3px"></a></li>
<li><a href="#"><img src="{% static '/img/email_icon2.png' %}" width="20%" style="padding: 3px"></a></li>
<li><a href="#"><img src="{% static '/img/email_icon3.png' %}" width="20%" style="padding: 3px"></a></li>
所以,似乎{%static%}不起作用。有人可以建议解决这个问题吗?非常感谢。
答案 0 :(得分:1)
这就是safe
过滤器的用途,逐字呈现。您应该在模板中保留html渲染。简化您的观点:
# views.py
...
c_email = set() # easier than list
queryset = db_imNewChk.objects.exclude(N_tag=u'').order_by("d_Rank")
for p in queryset:
if p.gp_Email:
c_email.add(p.gp_Email)
...
return render(request, 'exportnews.html', {..., 'count_email': sorted(c_email)})
然后,在模板中渲染内容,例如使用add
过滤器。您必须使用with
构造,因为static
tag only works with either a string literal or a variable:
{% for foo in count_email %}
{% with '/img/email_icon'|add:foo|add:'.png' as static_bar %}
<li><a href="#"><img src="{% static static_bar %}" width="20%" style="padding: 3px"></a></li>
{% endwith %}
{% endfor %}