gpt4 book ai didi

Django 模板从数据库渲染并解释标签

转载 作者:行者123 更新时间:2023-12-05 09:24:56 24 4
gpt4 key购买 nike

urls.py

url(r'^/mailing/(?P<pk>\d+)/preview/$', PreView.as_view(), name="preview"),

模型.py

class Message(models.Model):
# ... other fields ...
body = models.TextField(_("Body"), help_text=_("You can use Django <a target='_blank' href='https://docs.djangoproject.com/en/dev/ref/templates/builtins/'>template tags</a>"))

views.py

class PreView(TemplateView):
template_name = "mailing/preview.html"

def get_context_data(self, pk, **kwargs):
try:
return {"message": Message.objects.get(id=pk)}
except Message.DoestNotExist:
raise Http404

template/mailing/preview.html

<div id="body">{{ message.body|safe }}</div>

然而,django templatetags 没有被解释,只呈现为一个字符串。我想用一个

{% now "Y-m-d" %}

邮件正文中的标记。将来需要使用任何其他标签。

我有两种工作方法,但都不能令我满意。

  • 使用正则表达式和替换,
  • 将整个模板源放在 db TextField(文件的插入)中,并从中呈现一个页面(模板)。

我也在考虑创建 templatetag,它从 Message.body 返回呈现的模板。但是我不太确定它是好是坏。

你有什么建议吗?

最佳答案

您必须使用 Django template system

from django.template.loader import get_template_from_string
from django.template.context import Context

return {"message": message, "body": get_template_from_string(message.body).render(Context())}

编辑:

替代(和更漂亮)的解决方案可以是自定义模板过滤器:

from django import template
from django.template.defaultfilters import stringfilter

register = template.Library()

@register.filter
@stringfilter
def render(value):
return get_template_from_string(value).render(Context())

并使用:

{{message.body|render}}

关于Django 模板从数据库渲染并解释标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7661560/

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