【问题标题】:Stop jinja from converting string to url encoding?阻止 jinja 将字符串转换为 url 编码?
【发布时间】:2019-07-23 17:48:38
【问题描述】:

我目前正在我的烧瓶应用程序上使用一些 Jinja2 模板,以使用来自简单 sqlite 请求的图像路径在 html 页面上提取图像。 IE。流程如下:

1.从 SQLite 检索图像路径 在 SQLite 中,它只是一个文本字段,即:

imagePath text

例如,这可能类似于“post1.png”

2。格式化 html 页面的渲染模板 使用 url_for,使用给定的图像路径创建一个图像元素,即:

<img src="{{ url_for('static', filename='assets/images/blog/{{ imagePath }}') }}" alt="" class="img-fluid">

所以,我希望看到类似的东西:

<img src="assets/images/blog/post1.png" alt="" class="img-fluid">

但是,当页面被渲染时,我得到了一些奇怪的 url 编码,即:

<img src="/static/assets/images/blog/%7B%7B%20post%5B7%5D%20%7D%7D" alt="" class="img-fluid">

我在模板过程中做错了吗?或者我可以做些什么来删除所有生成的十六进制字符?我尝试传入一个字符串过滤器,但这似乎也不起作用。

【问题讨论】:

  • 尝试打印 imagePath 的真正含义
  • 您的 url 编码转换为 {{ post[7] }}。这不是图像文件名的好选择。
  • 你不能嵌套花括号 {{ }} 所以 Jinja 将它们作为 URL 的一部分进行转义。 stackoverflow.com/a/20845452/3357118 讨论了与 url_for() 几乎相同的用例

标签: python html flask jinja2


【解决方案1】:

Jinja2 documentation 说:

启用自动转义后,默认情况下会转义所有内容,但明确标记为安全的值除外。变量和表达式可以在以下任一位置标记为安全: - 应用程序使用 MarkupSafe.Markup 的上下文字典,或 - 模板,带有|safe 过滤器

所以,你可以尝试使用safe过滤器(http://jinja.pocoo.org/docs/2.10/templates/#safe):

<img src="{{ url_for('static', filename='assets/images/blog/' ~ imagePath ) | safe }}" alt="" class="img-fluid">

或遵循 Jinja2 模板文档中的其他建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 2022-11-28
    • 2016-10-26
    相关资源
    最近更新 更多