将Django视图类渲染为字符串或响应

时间:2012-12-04 22:04:12

标签: 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, 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发出请求?

1 个答案:

答案 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)