Python 将Django视图类呈现为字符串或响应
我有一个模板,我希望能够直接提供服务,并嵌入到Django应用程序中的任意其他模板中。我尝试为它创建一个视图类,如下所示:Python 将Django视图类呈现为字符串或响应,python,django,Python,Django,我有一个模板,我希望能够直接提供服务,并嵌入到Django应用程序中的任意其他模板中。我尝试为它创建一个视图类,如下所示: class TemplateView(View): def get(self, request): context = self._create_context(request) return render_to_response('template.html', context) def get_string(self,
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
,以便从其他视图调用get\u string
一定有更好的方法来做这件事。想法
更新:我看到一些人谈论在内部发出请求并使用
response.content
,这将使我不必编写获取字符串
方法。因此,也许更好的问题是:如何从另一个视图向TemplateView
发出请求?我将遵循django的CBV模式:它通过调度
确定返回的方法。默认情况下,基于请求.方法
。为什么不基于传递给dispatch()
的任何其他参数
因此,子类dispatch并提供一种方法来确定是否返回get\u 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)
您是如何将
get
连接到Django URL的get
通常通过View的dispatch()方法调用。@DerekKwok我的意思是我连接了TemplateView.as_View
,它在get
请求时反过来调用get
。这主意太棒了,谢谢!但是,这是否返回self.as_字符串(请求)
正确?似乎应该读取返回self.get\u字符串(请求)
。