首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django模板呈现从db和解释器标记

Django模板呈现从db和解释器标记
EN

Stack Overflow用户
提问于 2011-10-05 12:51:13
回答 1查看 2.1K关注 0票数 2

urls.py

代码语言:javascript
运行
复制
url(r'^/mailing/(?P<pk>\d+)/preview/$', PreView.as_view(), name="preview"),

models.py

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
<div id="body">{{ message.body|safe }}</div>

但是django模板标记不会被解释,只会呈现为字符串。我想用

代码语言:javascript
运行
复制
{% now "Y-m-d" %}

标记在消息体中。将来将需要使用任何其他标记。

我已经尝试了两种工作方法,两种方法都不能让我满意。

  • 使用regexp和替换,
  • 将整个模板源放入db TextField (insted of file)中,并从中呈现页面(模板)。

我还在考虑创建templatetag,它从Message.body.中返回一个呈现的模板不过,我不太清楚这是好是错。

你有什么意见建议?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-05 13:12:25

您必须使用Django模板系统

代码语言:javascript
运行
复制
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())}

编辑:

另一种(更漂亮的)解决方案可以是自定义模板过滤器:

代码语言:javascript
运行
复制
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())

和使用:

代码语言:javascript
运行
复制
{{message.body|render}}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7661560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档