3

我有一个模板,我希望它既可以直接提供服务,也可以嵌入到我的 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 URL。但是,我无法弄清楚如何实例化TemplateView以便可以get_string从其他视图调用。

必须有更好的方法来做到这一点。想法?

更新:我看到一些人谈论在内部提出请求并使用response.content,这将使我不必编写get_string方法。所以,也许一个更好的问题是:我如何TemplateView从另一个角度提出请求?

4

1 回答 1

3

我会遵循 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)
于 2012-12-06T04:53:25.073 回答