为什么在jinja中使用“safe”过滤器创建嵌套元素

2024-04-26 21:52:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本叫做“asides”的python字典。这个dict的值是从我的数据库加载的html片段,我想把它们注入到jinja模板中。在

以下是jinja片段:

<div class="small-3 large-3 columns">
        {% for k in asides.keys() %} 
            <div id={{k}} class="aside">{{asides[k]|safe}}</div>
        {% endfor %}
</div>

这将创建嵌套的div。假设我的dict有id 1和2,这将执行以下操作:

^{pr2}$

如果我删除安全过滤器,它的行为通常是创建非嵌套div。在

我想知道为什么安全过滤器会这样做,以及如何避免它(因为我不想要嵌套的div)。在


好吧,根据评论中的建议,我意识到问题出在哪里了。在我看来,这是一件有趣的事,所以我要把它记录在这里。在

所以,在应用程序副本(使用烧瓶):

from flask import Flask, render_template

app = Flask(__name__)
app.debug = True

@app.route('/')
def index():
    d = {'1':'<p>Test 1</p', '2':'<p>Test 2</p>'}
    return render_template('index.html', d=d)

if __name__=='__main__':
    app.run()

注意d中第一个元素的html是如何不正确的。结束p标记缺少“>;”。在

然后在模板中

<html>
    <body>
        <div>
            {% for k in d %}
                <div class={{k}}>{{d[k]|safe}}</div>
            {% endfor %}    
        </div>
    </body>
</html>

这将在第一个div中嵌套第二个div

我认为这个问题仍然悬而未决,因为知道为什么会发生这样的事情会很有趣。在


Tags: indiv模板idapp过滤器flaskfor
1条回答
网友
1楼 · 发布于 2024-04-26 21:52:48

模板有错误

d = {'1':'<p>Test 1</p', '2':'<p>Test 2</p>'}

第一个para标记没有正确关闭,应该是

^{pr2}$

我也遇到了同样的问题,输入数据中的HTML标记不完整。在

我不确定这是否是一个Jinja错误,也许它可以更好地处理它,或者创建一个错误

相关问题 更多 >