将模板变量呈现为HTML


186

我使用“消息”界面将消息传递给用户,如下所示:

request.user.message_set.create(message=message)

我想在{{ message }}变量中包含html 并呈现它,而不在模板中转义标记。

Answers:


331

如果您不想转义HTML,请查看safe过滤器和autoescape标签:

safe

{{ myhtml |safe }}

autoescape

{% autoescape off %}
    {{ myhtml }}
{% endautoescape %}

如果您需要显示例如欧元(€)之类的货币符号,则从视图中传递的美元就是这种方法。
andilabs 2014年

请注意,它autoescape off不是on。我犯了这个错误,直到后来才发现。
阿努帕姆

37

如果您想对文本进行更复杂的处理,则可以创建自己的过滤器,并在返回html之前做一些魔术。带有一个templatag文件,如下所示:

from django import template
from django.utils.safestring import mark_safe

register = template.Library()

@register.filter
def do_something(title, content):

    something = '<h1>%s</h1><p>%s</p>' % (title, content)
    return mark_safe(something)

然后,您可以将其添加到模板文件中

<body>
...
    {{ title|do_something:content }}
...
</body>

这会给您带来不错的结果。


30

您可以在代码中呈现模板,如下所示:

from django.template import Context, Template
t = Template('This is your <span>{{ message }}</span>.')

c = Context({'message': 'Your message'})
html = t.render(c)

有关更多信息,请参见Django文档


我想我在这里遇到了错误的结局,但现在暂时不回答。
Marcus Whybrow



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.