urls.py
url(r'^/mailing/(?P<pk>\d+)/preview/$', PreView.as_view(), name="preview"),models.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 Http404template/mailing/preview.html
<div id="body">{{ message.body|safe }}</div>但是django模板标记不会被解释,只会呈现为字符串。我想用
{% now "Y-m-d" %}标记在消息体中。将来将需要使用任何其他标记。
我已经尝试了两种工作方法,两种方法都不能让我满意。
我还在考虑创建templatetag,它从Message.body.中返回一个呈现的模板不过,我不太清楚这是好是错。
你有什么意见建议?
发布于 2011-10-05 13:12:25
您必须使用Django模板系统
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}}https://stackoverflow.com/questions/7661560
复制相似问题