【问题标题】:Iterating over a list of URLs in an HTML template using Python/Flask使用 Python/Flask 遍历 HTML 模板中的 URL 列表
【发布时间】:2012-09-21 06:48:09
【问题描述】:

这似乎是一个非常基本的问题,但我无法弄清楚。我正在将 URL 列表传递到 HTML 页面中,并尝试在 href 标记中打印每个 URL。我正在使用 Flask 运行测试服务器,并且可以确认变量是否正确传入(我可以打印出整个列表或其中的元素)。

我的应用路线:

import doaudit # separate Py script that gets these urls

@app.route('/audit', methods = ['GET'])
def audit():
    return render_template('audit.html', listOfUrls = doaudit.listOfUrls)

我的模板:

<html>
    <head>
        <title>Data Audit</title>   
</head>
<body>

        {% for url in listOfUrls %}        
        <script language="JavaScript">
            document.write( "<a href=\"" + url + "\">linktext</a>" );
        </script>
        {% endfor %}

    </body>
</html>

我尝试过以下方面的变化:

document.write( "<a href=\"" + '{{ listOfUrls[i] }}' + "\">linktext</a>" );

并遍历所有 i,但这也不起作用。

列表的长度可以变化,所以我需要一个迭代解决方案。提前致谢。

【问题讨论】:

    标签: javascript python html flask


    【解决方案1】:

    这就是你想要的:

    {% for url in listOfUrls %}        
        <script language="JavaScript">
            document.write( "<a href=\"" + {{ url|tojson|safe }} + "\">linktext</a>" );
        </script>
    {% endfor %}
    

    {{ url }} 部分告诉 Jinja2(模板引擎)这个 url 实际上是您在 for url in blabla 中调用的变量。没有它,它会按原样打印。您可以在浏览器中查看源代码时看到它。这意味着它将被解释为一个 JS 变量,即undefined,相当于一个空字符串,然后您会看到。

    编辑: 添加了 tojson|safe 调用,以确保它不会破坏 JS 代码。你可以这样做:&lt;a href=\"{{ url }}\"&gt;linktext&lt;/a&gt;。但是" 会破坏你的 html/js 代码。

    编辑 2:tojson 过滤器的作用是使其适合放入 JS 代码中。 safe 过滤器告诉渲染引擎它不应将其视为任何文本(应将其转义以在 HTML 中正确显示),而应将其视为安全文本(无论是否为 HTML)。

    【讨论】:

    • 成功了。没有 tojson|safe 对我的应用程序根本不起作用。谢谢。
    • @acpigeon 太好了。我更新了我的答案,以提供有关所用过滤器的更多详细信息,认为这些过滤器可能会更有用。
    猜你喜欢
    • 2010-10-21
    • 1970-01-01
    • 2016-03-16
    • 2014-04-22
    • 1970-01-01
    • 2018-02-24
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多