我知道这不推荐,因为它应该在视图中完成,但我有一个场景,我需要在模板中进行过滤。
我有sitefiles_set,我在同一模板中请求2或3次,并使用if语句在正确的位置显示正确的文件类型。 (它都是展示品)
因此,在我的模板中,针对下面的特定文件类型(照片),我将数据拆分为表格列,以使其在页面中更具可读性。然而,模板forloop计数器计算所有文件,而不仅仅是if中的文件,因此在我的实际显示中,我在左列显示5个链接,然后在右边显示8个链接。
所以我需要过滤掉那些不是橱柜照片而不是使用if的东西。但我需要相同的模型,所以我可以在另一个部分再次使用它来显示另一种类型。
由于
<b>Cabinet Photos:</b><br/>
<table>
<tr>
<td>
<ul class="standard-list">
{% for file in Site.sitefiles_set.all %}
{% if file.file_type.type == 'Cabinet Photo' %}
<li>
<a href="{{ MEDIA_URL }}{{ file.site_image }}" data-lightbox="sitephotos" data-title="{{ file.file_name }}">
{{ file.file_name }}
</a>
</li>
{% if forloop.counter|divisibleby:"8" and file.file_type.type == 'Cabinet Photo' %}
</ul>
</td>
<td>
<ul class="standard-list">
{% endif %}
{% if forloop.counter|divisibleby:"16" and file.file_type.type == 'Cabinet Photo' %}
</ul>
</td>
</tr>
<tr>
<td>
<ul class="standard-list">
{% endif %}
{% endif %}
{% endfor %}
</ul>
</td>
</tr>
</table>
答案 0 :(得分:0)
我用这个
做到了from django import template
from networks.models import SiteFiles
register = template.Library()
@register.assignment_tag
def get_files_by_type(SiteFiles, type):
return SiteFiles.filter(file_type__type=type)