我有一个模板,我希望能够直接提供并嵌入我的Django应用程序中的任意其他模板中。我试图为它创建一个看起来像这样的视图类:
class TemplateView(View):
def get(self, request):
context = self._create_context(request)
return render_to_response('template.html', context)
def get_string(self, request):
context = self._create_context(request)
return render_to_string('template.html', context)
def _create_context(self, request):
context = {}
# Complex context initialization logic...
return context
我已将get
连接到我的Django网址。但是,我无法弄清楚如何实例化TemplateView
,以便我可以从其他视图中调用get_string
。
必须有更好的方法来做这件事。想法?
更新:我看到有些人在讨论在内部发出请求并使用response.content
,这样可以避免编写get_string
方法。所以,或许更好的问题是:如何从另一个视图向TemplateView
发出请求?
答案 0 :(得分:3)
我将遵循django的CBV模式:它通过dispatch
确定要返回的方法。默认情况下基于request.method
。为什么不基于传递给dispatch()
的任何其他参数?
所以子类调度并给它一种方法来确定是否返回get_string
。
def dispatch(self, request, *args, **kwargs):
if 'as_string' in kwargs:
return self.get_string(request)
return super(TemplateView, self).dispatch(request, *args, **kwargs)
response = TemplateView.as_view()(request, as_string=True)