2

そのため、かなり単純なカスタム テンプレート タグがあります。ビュー名を受け取り、それをレンダリングし、そのコンテンツを返します。問題は、.as_view()それらを使用するとコンテンツが取得されますが、コンテキストが適切に設定されていないように見えることです。これは、がメイン テンプレートに適切に追加されないためですdjango-sekizaiaddtoblock一方、ビューを直接インスタンス化して呼び出す.render_to_response(context).render()と、コンテキストが更新され、sekizaiブロック データがベース テンプレートに挿入されます。ただし、この 2 番目の方法では、フォームが正しくレンダリングされません (レンダリングされます.as_view())。両方を汚さずにこれを行う方法はありますか?

class PopupNode(template.base.Node):
    def __init__(self, popup):
        self.popup = popup

    def render(self, context):
        # only needed to update context
        view_object = self.popup()
        view_object.request = context['request']
        view_object.render_to_response(context).render()

        # actual content
        view_function = self.popup.as_view()
        template_response = view_function(context['request'], context=context)
        template_response.render()
        return template_response.content
4

1 に答える 1

0

結局のところ、継承されたget()関数は既存のコンテキストを無視して独自のコンテキストをレンダリングし(ビューは他のビュー内でレンダリングされることを期待していないため、論理的です)、sekizai更新を許可しません。直接呼び出すと.render_to_template()コンテキストを提供できるため、機能します。メソッドをオーバーライドして、get()以前のコンテキストを受け入れ、独自の作業を注入します。

于 2012-09-04T12:29:34.113 に答える