Django模板:将编号为img的内容加载到html

时间:2017-01-21 16:14:52

标签: python html django-templates

我试图遍历数据库计数以在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%}不起作用。有人可以建议解决这个问题吗?非常感谢。

1 个答案:

答案 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 %}