【问题标题】:JINJA loop doesn't display correct variable PythonJINJA 循环不显示正确的变量 Python
【发布时间】:2020-12-03 12:50:33
【问题描述】:

我有漂亮的汤可以在网上搜索信息。我想将结果发送到带有渲染模板的 html 和带有 JINJA 的 html 循环中。美丽的汤给了我 bs.tag 格式类型的结果。我无法删除不需要的标签,只能以这种格式保存搜索到的数据,所以我决定将其转换为字符串,然后替换不需要的字符:

.py

   title = soup.find_all(class_="BNeawe vvjwJb AP7Wnd")
   for v in title:
       r1 = str(v)
       r2 = r1.replace('<div class="BNeawe vvjwJb AP7Wnd">', "")
   return render_template('test.html', r2=r2)

.html

{% for item in title %}
   <div>{{ r2 }}</div>
{% endfor %}

奇怪的是,虽然我在 render_template 和 html 中提供 r2,但我正在使用 &lt;div.. 获取数据,因为我不应该在 r2 中已将其替换为“”。系统似乎以某种方式采用 r1v 变量而不是 r2。我无法使用 print() 测试在控制台中测试了哪些数据我得到了所有变量的正确值...

【问题讨论】:

  • 您在循环中重复分配给r2;您传递给模板的值是循环最后一次迭代中的值,所有先前的值都将丢失。至于为什么替换不起作用,您确定 HTML 包含确切的文本&lt;div class="BNeawe vvjwJb AP7Wnd"&gt;,没有一个字符不同吗?特别是,实际标记可能使用单引号而不是双引号,或者可能具有除class 之外的某些属性。
  • Jason,我正在替换我用作soup.find_all 键的相同类值,因此我认为它必须相同。据我了解,如果它以正确的方式在控制台中打印,则相同的结果应该在 html 模板中......我按照你的建议搞乱了引号,但没有任何结果......

标签: python flask jinja2


【解决方案1】:

根据模板设计器文档:(https://jinja.palletsprojects.com/en/2.11.x/templates/#html-escaping)

从模板生成 HTML 时,总是存在变量包含影响生成 HTML 的字符的风险。有两种方法: a) 手动转义每个变量;或者 b) 默认情况下自动转义所有内容。”

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

【讨论】:

    猜你喜欢
    • 2012-03-15
    • 2021-12-02
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 2015-12-27
    • 1970-01-01
    相关资源
    最近更新 更多