4

Django 说有 3 种方法可以关闭自动转义:

  1. |safe在变量之后使用
  2. 在块内使用{% autoescape on %}{% endautoescape %}
  3. 使用类似的上下文context = Context({'message': message}, autoescape=False)

(1)和(2)工作正常。但是我有模板来生成纯文本推送通知,并且我有大量模板要构建和维护。我可以通过并将{% autoescape on %}and{% endautoescape %}标签放入所有这些标签中,但是 (3) 应该允许我在视图中的一行中执行此操作。

模板:

{% block ios_message %}{{message}}{% endblock %}

风景:

message = u"'&<>"
context = Context({'message': message}, autoescape=False)
render_block_to_string(template_name, 'ios_message', context)

输出:

u'&#39;&amp;&lt;&gt;

block_render.py 的代码来自这里:https ://github.com/uniphil/Django-Block-Render/blob/master/block_render.py 。我从那里按原样使用它。

有谁知道给了什么?

4

3 回答 3

1

仔细看看函数render_block_to_string()

def render_block_to_string(template_name, block, dictionary=None,
                           context_instance=None):
    """Return a string

    Loads the given template_name and renders the given block with the
    given dictionary as context.

    """
    dictionary = dictionary or {}
    t = _get_template(template_name)
    if context_instance:
        context_instance.update(dictionary)
    else:
        context_instance = Context(dictionary)
    return render_template_block(t, block, context_instance)

第三个参数应该是一个字典,而不是上下文。否则它将使用正常的上下文实例。

所以我认为应该是:

render_block_to_string(template_name, 'ios_message', {},  context)

希望能帮助到你。

于 2013-08-13T18:04:02.923 回答
0

我可以这样解决它:

from django.template.context import make_context
from django.template.loader import get_template

# Getting the template either by a path or creating the Template object yourself
template = get_template('your/path/to/the/template.html')
# Note here the 'template.template' and the 'autoescape=False' parameter
subject = template.template.render(make_context(context, autoescape=False))

通过我自己找到它。因为默认情况下,引擎会使用自动转义设置 https://github.com/django/django/blob/4b6dfe16226a81fea464ac5f77942f4d6ba266e8/django/template/backends/django.py#L58-L63

Django 版本:2.2.1

于 2019-06-05T08:49:29.137 回答
0

想发表评论,但看起来我没有足够的声誉,因为这是一个新的ish帐户

你可以在这里关闭autoescape找到的:https ://github.com/django/django/blob/529c3f264d99fff0129cb6afbe4be2eb11d8a501/django/template/context.py#L137

IE

Context(data_dict, autoescape=False)
于 2019-08-26T19:19:35.127 回答