Django过滤模板中的查询集

时间:2016-05-31 16:14:46

标签: django

我知道这不推荐,因为它应该在视图中完成,但我有一个场景,我需要在模板中进行过滤。

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

1 个答案:

答案 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)