我有一个模板,我希望它能够直接提供服务并嵌入到我的 Django 应用程序中的任意其他模板中。我试图为它创建一个如下所示的 View 类:
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 URL。但是,我一直无法弄清楚如何实例化 TemplateView
以便我可以从其他 View 调用 get_string
。
必须有更好的方法来执行此操作。想法?
更新:我看到一些人谈论在内部发出请求并使用 response.content
,这将使我不必编写 get_string
方法。因此,也许更好的问题是:如何从另一个 View 向 TemplateView
发出请求?
最佳答案
我会遵循 django 的 CBV 模式:它通过 dispatch
确定返回什么方法。默认基于request.method
。为什么不基于传递给 dispatch()
的任何其他参数?
因此子类化 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)
关于python - 将 Django View 类呈现为字符串或响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13712767/