0

myVarビュー関数で設定されたコンテキスト変数を持つdjangoテンプレートがあります。このテンプレートは、レンダリングするカスタムのシンプルなテンプレートタグ{% myTemplateTag %}もレンダリングしますmyTemplate.html

myVarをレンダリングするカスタムテンプレートタグ内で使用したいmyTemplate.html

カスタムテンプレートタグでビュー関数のコンテキスト変数を継承する方法はありますか?(テンプレートタグにパラメータとして明示的に渡さずに)?

4

2 に答える 2

2

simple_tagの使用

simple_tagを使用して、次のように設定しtakes_context=Trueます。

@register.simple_tag(takes_context=True)
def current_time(context, format_string):
    timezone = context['timezone']
    return your_get_current_time_method(timezone, format_string)

カスタムテンプレートタグの使用

template.Variable.resolve()を使用するだけです。

foo = template.Variable('some_var').resolve(context)

テンプレートタグへの変数の受け渡しを参照してください。

Variableクラスを使用するには、解決する変数の名前でインスタンス化してから、variable.resolve(context)を呼び出します。したがって、たとえば:

class FormatTimeNode(template.Node):
    def __init__(self, date_to_be_formatted, format_string):
        self.date_to_be_formatted = template.Variable(date_to_be_formatted)
        self.format_string = format_string

    def render(self, context):
        try:
            actual_date = self.date_to_be_formatted.resolve(context)
            return actual_date.strftime(self.format_string)
        except template.VariableDoesNotExist:
            return ''

変数解決は、ページの現在のコンテキストで渡された文字列を解決できない場合、VariableDoesNotExist例外をスローします。

コンテキストで変数を設定することも役立つかもしれません。

于 2013-02-14T11:01:39.557 に答える
0

おそらく、特別なタグを使用してファイルをレンダリングする代わりにinclude、ファイルを作成できますか?インクルードタグmyTemplate.htmlを見ましたか?あなたがそれを含むものと文脈を共有するならば。include myTemplate.html

于 2013-02-14T11:01:47.337 に答える