【问题标题】:Mako escaping issue within PyramidMako 在 Pyramid 中逃脱问题
【发布时间】:2012-08-21 16:07:35
【问题描述】:

我需要将 javascript 函数放入 mako 模板。这个函数的第一个参数是字符串,所以我写在我的 *.mako 文件中 (dict(field_name='geom')):

init_map(
    '${field_name}'
);

但是当我看到我的 html 页面时,它看起来像:

init_map(
    'geom'
)

在这种情况下如何禁用转义?

渲染执行以下方式:

from pyramid.renderers import render
render('georenderer/map.mako', template_args)

【问题讨论】:

    标签: python escaping pyramid mako


    【解决方案1】:

    我认为你需要在你的表达中包含引号。您可以使用 json 模块输出有效的 JavaScript 文字:

    dict(field_name=json.dumps('geom'))
    

    在你的模板中:

    init_map(
        ${field_name | n}
    );
    

    然后引号由.dumps() 函数生成,| n 过滤器确保它们不会被转义;你已经让你的值 JavaScript 安全了,你也不需要它们 HTML 安全的。

    额外的好处是该模块还将转义 JavaScript 值中的任何引号,并正确处理 unicode:

    >>> import json
    >>> print json.dumps(u'Quotes and unicode: " \u00d8')
    "Quotes and unicode: \" \u00d8"
    

    【讨论】:

    • 感谢您的回答,但在我的情况下,问题可能与嵌套的 mako 模板有关。当我构建了一个没有嵌套的模板时,一切都可以正常工作了。
    • @Martjin Pieters 不要忘记引用 '${field_name | n}'... :)
    • @VitaliPonomar:不!引号由 json.dumps 模块提供!
    【解决方案2】:

    尝试n 过滤器。根据the docs,它禁用转义(或任何其他默认过滤):

    ${field_name | n}
    

    更新:对不起,我没有注意到引号是 围绕表达式。而且现在看起来很奇怪……

    【讨论】:

    • 问题是表达式周围的引号被转义了。
    • 完全正确,看起来像金字塔问题,因为直接通过 Mako 进行渲染可以正常工作。
    猜你喜欢
    • 2012-02-20
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 2017-10-31
    • 2016-02-11
    相关资源
    最近更新 更多