そのため、かなり単純なカスタム テンプレート タグがあります。ビュー名を受け取り、それをレンダリングし、そのコンテンツを返します。問題は、.as_view()
それらを使用するとコンテンツが取得されますが、コンテキストが適切に設定されていないように見えることです。これは、がメイン テンプレートに適切に追加されないためですdjango-sekizai
。addtoblock
一方、ビューを直接インスタンス化して呼び出す.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