0

私はループを実行するためにテンプレートフィルタを使用しようとしていますが、私は同じステートメント/テンプレート内に2つのpythonステートメントを組み合わせることができません。テンプレートで2つの変数を組み合わせる正しい方法は何ですか?以下の構文と説明をご覧ください:Djangoテンプレートで2つのテンプレートタグをネストまたは共同使用する方法はありますか?

私は二重インデックスを持つフォーラムを構築しています。つまり、カテゴリのリストでcol-md-2を取得しました。各カテゴリにはフォーラムがあり、クリックされたカテゴリに応じて、そのカテゴリのフォーラムに次のcol-md-2が表示されます。残りのcol-md-8は、どのカテゴリとどのフォーラムが選択されたかに基づいてコンテンツを取得します。

マイロジック:

私は、ページがロードされたか、どのカテゴリまたはフォーラムが選択されますその関係なく変更することはありませんカテゴリのリストをロードするテンプレートタグを定義しました。それはうまく動作します。しかし、選択したカテゴリに基づいて、私の2番目の列にはデータが取り込まれる必要があります。このため、カスタムフィルタを定義しようとしています(下記参照)。しかし、私は、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

こんにちは。このカスタムフィルタを含むカスタムtemplatetagファイルの名前はpybb_tags.pyですので、{{%load i18n pybb_tags forumindexlistbycat%} '、{{%load i18n pybb_tags%}}、{{%load i18n pybb_tags% } {%forumindexlistbycat as forumindexlistbycategory%} 'しかし、これらの2つのエラーが発生するたびに、' 2行目のブロックタグが無効です: 'forumindexlistbycat'。 'このタグを登録したり読み込んだのを忘れましたか? 'または' forumindexlistbycat 'は登録されたタグライブラリではありません。私はあなたの構文が真実かもしれないと思うが、私はどのように私のテンプレートにこのフィルタを適切にロードするのですか? –

+0

あなたのタグファイルにあなたのフィルタとして名前をつけて、あなたのappディレクトリの 'templatetags'フォルダに入れてみてください。したがって、 '../app/templatetags/forumindexlistbycat.py'のようなパスがあります – toffi9

+0

templatetagsフォルダに空のファイル '__init __。py'も追加してください。 – toffi9

関連する問題