1

含まれるたびにランダムな文字列が必要な部分テンプレートがあります。インクルードごとに 1 回よりも同じランダム文字列にアクセスする必要がありますが、パーシャルが何回含まれるかわかりません。

現在、コンテキストに追加するためにこれを行っています

@register.tag
def randomgen(parser, token):
    return RandomgenNode()


class RandomgenNode(template.Node):
    def render(self, context):
        context['randomgen_str'] = os.urandom(16).encode('hex')
        return ''

{% randomgen %}これにより、パーシャルの先頭と{{ randomgen_str }}、文字列が必要な場所で実行できます。これは必ずしも悪いことではありません。これを達成するための好ましい方法があるかどうかはわかりませんでした。

ありがとう

4

2 に答える 2

1

ガロマークのおかげで、最善の解決策を見つけることができました。割り当てタグはまさに私が望んでいたことをしました。

@register.assignment_tag
def randomgen():
    return os.urandom(16).encode('hex')

次に、テンプレートで、含まれているテンプレートの最後で次を使用できます

{% randomgen as randomgen_string %}

ランダムな文字列が必要な場所で次を使用します

{{ randomgen_str }}
于 2012-12-04T21:12:50.710 に答える
0

含まれているテンプレートが包含タグにラップされている場合は、テンプレートをレンダリングする前にコンテキストを変更できます。

たとえば、現在、次の単純なテンプレート インクルードを実行しているとしますtemplate.html

{% include "templates/template.html" %}

これは、次のようなテンプレート タグにまとめることができます。

@register.inclusion_tag("templates/template.html", takes_context=True)
def render_my_template(context):
    context['randomgen_str'] = os.urandom(16).encode('hex')
    return context

これにより、元のビュー コンテキストにアクセスできるようtemplate.htmlになり、追加されるrandomgen_strので、今までと同じようにアクセスできます。次に、以前にあった の代わりに、{% include %}を呼び出します{% render_my_template %}

于 2012-12-02T16:52:03.493 に答える