2016-05-31 101 views
0

我知道这不是建议的,因为它应该在视图中完成,但我有一个场景,我需要在模板内进行筛选。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> 
+0

你应该使用模板标签,然后 –

+0

@MosesKoledoye我如何做到这一点? – AlexW

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