0

我試圖使用模板過濾器來執行循環,但我無法在同一個語句/模板中組合兩個python語句。什麼是在模板中組合兩個變量的正確方法?請參閱下面的語法和解釋:如何在Django模板中嵌套或聯合使用兩個模板標籤?

我正在建立一個雙重索引的論壇,意思是說,我有一個帶有類別列表的col-md-2。每個類別都有論壇,根據哪個類別被點擊,該類別的論壇將填充下一個col-md-2。其餘的col-md-8基於哪個類別和哪個論壇被選中來獲取其內容。

我的邏輯:

我定義加載分類列表,這永遠不會改變,不論這些頁面被加載或類別或論壇選擇了模板標籤。所以這很好。但基於選定的類別,我的第二列需要填充。爲此,我試圖定義一個自定義過濾器(如下)。但是,我不知道如何使用它,因爲它需要傳遞給另一個模板,它運行一個循環來呈現html。即使我在這個模板中創建for循環(而不是將它傳遞給另一個模板),我仍然需要執行嵌套模板標記,如:{% for forum in {{ forum.category|forumindexlistbycategory }} %}無論哪種情況,我都會收到類型爲Invalid filter: 'forumindexlistbycategory'"with" in u'include' tag needs at least one keyword argument的錯誤。

我已經在我的pybb_tags.py定義下列自定義模板過濾器:

from pybb.models import Forum 

@register.filter 
def forumindexlistbycat(category): 
    forumlistbycat = Forum.objects.filter(category=category) 
    return forumlistbycat 

而且在我的模板,我試圖加載它,如下所示:

{% load i18n pybb_tags %} 

<div class='category'> 
    {% if category %} 
    <h3>{{ category }}</h3> 
    {% include 'pybb/forumindex_list.html' with forum_list=category.forums_accessed category=category parent_forum='' %} 
    {% else %} 
    <h3>{{ forum.category }}</h3> 
    {% include 'pybb/forumindex_list.html' with forum_list= %}{{ forum.category|forumindexlistbycategory }} 
    {% endif %} 
</div> 

回答

2

所以你必須先正確註冊模板標籤。從上面

from django import template 
from pybb.models import Forum 

register = template.Library() 

@register.filter 
def forumindexlistbycat(category): 
    forumlistbycat = Forum.objects.filter(category=category) 
    return forumlistbycat 

將代碼文件命名爲您的過濾器,所以forumindexlistbycat.py以及應用中的移動這個文件夾templatetags。如果你沒有這個文件夾,你必須創建它。不要忘記在您的templatetags文件夾中添加空文件__init__.py。現在,你可以在模板中使用它,所以:

{% load i18n forumindexlistbycat %} 

當你templatetag註冊你被它的名字加載它。 然後你使用它像:

{% include 'pybb/forumindex_list.html' with forum_list=forum.category|forumindexlistbycategory %} 

檢查的詳細信息 - Guide on Custom template tags and filters.

+0

嗨。包含這個自定義過濾器的自定義模板標籤文件的名稱是pybb_tags.py,所以我嘗試了'{%load i18n pybb_tags forumindexlistbycat%}','{%load i18n pybb_tags%}'和{%load i18n pybb_tags% } {%forumindexlistbycat as forumindexlistbycategory%}'但每次遇到這兩個錯誤時:'第2行的塊標記無效:'forumindexlistbycat'。你忘了註冊或加載這個標籤嗎?或''forumindexdexlistbycat'不是已註冊的標籤庫。「我認爲你的語法可能是真的,但我怎樣才能正確地加載這個過濾器到我的模板? –

+0

嘗試將您的標記文件命名爲您的過濾器,並將其放置在應用程序目錄中的「templatetags」文件夾中。所以它的路徑如'../app/templatetags/forumindexlistbycat.py' – toffi9

+0

在你的templatetags文件夾中添加空文件'__init __。py'。 – toffi9