3

这似乎是一个非常基本的问题,但我无法弄清楚。我将 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 但这也不起作用。

列表的长度可能会有所不同,因此我需要一个迭代解决方案。提前致谢。

4

1 回答 1

5

这就是你想要的:

{% 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 代码。你可以这样做:<a href=\"{{ url }}\">linktext</a>。但随后 a"会破坏您的 html/js 代码。

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

于 2012-09-29T20:06:45.850 回答