python - 将 Django View 类呈现为字符串或响应

标签 python django

我有一个模板,我希望它能够直接提供服务并嵌入到我的 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/

相关文章:

python - Django1.11 AttributeError at/login/'NoneType' 对象没有属性 'is_active'

python - user32.SwitchDesktop 仅在 Debug模式下工作 - Python Windows 服务

python - 更改pyqt中QStackedWidget的索引

Django动态模型设计

django - 清理自定义用户模型

python - 无法让 url 函数与 django 中的特定语法一起使用

0 的 Python reduce() 函数

python - Django 1.11 order by field on related model duplicate results 解决方法

python - pyplot 双对数等高线图不起作用

python - Pillow 调整像素化图像的大小 - Django/Pillow