2017-01-21 1 views
1

Ich versuche, die Datenbankanzahl zu durchlaufen, um img in ein HTML einzufügen, kann aber nicht den {statischen} Befehl arbeiten. Im Einzelnen:Django Vorlage: loaded nummeriert img to html

importieren die Liste von 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)}) 

Dann in der django Vorlage 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> 

Was ich erreichen möchte ist wie folgt aus:

<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> 

Stattdessen ist jedoch der HTML-Code wie folgt gerendert:

<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> 

So scheint es, die {% static%} hat nicht funktioniert. Könnte jemand raten, dieses Problem zu lösen? Danke vielmals.

Antwort

1

Das ist, was der safe Filter ist, um Dinge wörtlich gerendert zu bekommen. Sie sollten das HTML-Rendering in der Vorlage beibehalten. Vereinfachen Sie Ihre Ansicht:

# 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)}) 

Dann Rendern Zeug in der Vorlage, z. Verwenden Sie den add Filter. Sie würden die with Konstruktion, weil die static tag only works with either a string literal or a variable verwenden:

{% 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 %} 
+0

Wow, vielen Dank! Es klappt. Ich habe noch nie etwas über Python gelernt, wirklich eine großartige Lektion mit dieser neuen Verwendung! –