【问题标题】:django-markupfield returns stringdjango-markupfield 返回字符串
【发布时间】:2016-05-15 21:52:59
【问题描述】:

我正在尝试设置一个模型中包含 MarkupField 的 Django 应用程序,如下所示:

from django.db import models
from markupfield.fields import MarkupField

class Recipe(models.Model):
    instructions = MarkupField(default_markup_type='markdown')

然后我在 Jinja2 模板中渲染该字段,如下所示:

{% if recipe.instructions %}
    {{ recipe.instructions }}
{% else %}
    No instructions have been added yet.
{% endif %}

markdowned 文本的渲染完美无缺,但它作为字符串放置在 DOM 中,因此浏览器不会解释 HTML 标记,如您在此处看到的:

我不觉得我错过了 django-markupfield 文档中的相关内容,但不知何故我需要摆脱这个字符串表示。

你们中有人有想法吗?提前致谢。

【问题讨论】:

  • 如果您添加 safe 过滤器是否有效:{{ recipe.instructions|safe }}?
  • @doru 不,不起作用。
  • 如果你使用recipe.instructions.rendered,它有什么改变吗?
  • @doru 也不起作用。我设法通过{% autoescape off %}{{ recipe.instructions }}{% endautoescape %} 让它工作,就像this question 中建议的那样。虽然觉得有点不方便...

标签: python django jinja2


【解决方案1】:

感谢@doru 的建议,我偶然发现了 Jinja2 文档并找到了自动转义语句:

{% autoescape off %}{{ recipe.instructions }}{% endautoescape %}

这个对我有用。

甚至可以通过将autoescape 选项设置为False 使其在全球范围内工作。

{
    'BACKEND': 'django_jinja.backend.Jinja2',
    ...
    'OPTIONS': {
        'autoescape': False,
        ...
    }
},

【讨论】:

    猜你喜欢
    • 2016-07-21
    • 2014-09-09
    • 2020-08-13
    • 2017-09-21
    • 2014-05-19
    • 2021-02-19
    • 1970-01-01
    • 2018-04-17
    • 2011-02-02
    相关资源
    最近更新 更多