gpt4 book ai didi

python - Django TemplateView 从数据库的字段获取模板

转载 作者:行者123 更新时间:2023-12-01 00:21:30 25 4
gpt4 key购买 nike

我想创建一个模板 View ,但需要即时使用可编辑模板,为此我可以根据存储在表字段内的代码设置模板。

# some_app/views.py
from django.views.generic import TemplateView

class AboutView(TemplateView):
template_name = "about.html" -> from table.field

有什么想法吗?

很棒的@WillemVanOnsem 很好的解决方案。但更复杂的是,如果我想在 Django Rest 中执行如下操作:

class FormularioDisplayView(APIView):
renderer_classes = [TemplateHTMLRenderer]

def get(self, request, pk):
formulario = get_object_or_404(Formulario, codigo=pk)
serializer = FormularioDisplaySerializer()
template_data = TemplateData.objects.get(name='model_01')

return Response({'serializer': serializer, 'formulario': formulario}) -> Render using template_data.template as the template

最佳答案

我们可以更改TemplateView以从数据库获取模板的内容。例如,我们可以有一个这样的模型:

# app/models.py

class TemplateData(models.Model):
name = models.CharField(max_length=128, unique=True)
template = models.CharField(max_length=32768)

此处,TemplateData 模型将名称与模板的内容相关联。

接下来我们可以实现一个TemplateFromDatabaseView,其中我们覆盖 render_to_response method [Django-doc] :

# app/views.py

from app.models import TemplateData
from django.http import HttpResponse
from django.views.generic import TemplateView
from django.template import Template, Context

class <b>TemplateFromDatabaseView</b>(TemplateView):

def <b>render_to_response</b>(self, context, **response_kwargs):
template_data = TemplateData.objects.get(name=self.template_name)
return HttpResponse(
Template(template_data.template).render(
RequestContext(self.request, context)
)
), **response_kwargs)

然后你可以将其子类化,例如:

# app/views.py

# …

class AboutView(<b>TemplateFromDatabaseView</b>):
template_name = 'database_template_name'

当然,这意味着您需要将 TemplateData 对象添加到数据库,其 name'database_template_name' ,并为 >template 字段,您要渲染的内容。

关于python - Django TemplateView 从数据库的字段获取模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58924357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com