acp*_*eon 3 html javascript python flask
这似乎是一个非常基本的问题,但我无法弄清楚。我将 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)
Run Code Online (Sandbox Code Playgroud)
我的模板:
<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>
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方面的变化:
document.write( "<a href=\"" + '{{ listOfUrls[i] }}' + "\">linktext</a>" );
Run Code Online (Sandbox Code Playgroud)
并迭代所有 i 但这也不起作用。
列表的长度可能会有所不同,因此我需要一个迭代解决方案。提前致谢。
这就是你想要的:
{% for url in listOfUrls %}
<script language="JavaScript">
document.write( "<a href=\"" + {{ url|tojson|safe }} + "\">linktext</a>" );
</script>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
该{{ url }}部分告诉 Jinja2(模板引擎)这url实际上是您在for url in blabla. 没有它,它会按原样打印。在浏览器中查看源时可以看到它。这意味着它将被解释为一个 JS 变量,它undefined相当于一个空字符串,然后你会看到它。
编辑:添加了tojson|safe调用,以确保它不会破坏 JS 代码。你可以这样来做:<a href=\"{{ url }}\">linktext</a>。但是这样"会破坏你的 html/js 代码。
编辑2:在什么tojson过滤器呢,是使其适合JS代码里面放。并且safe过滤器告诉渲染引擎它不应将其视为任何文本(应将其转义以在 HTML 中正确显示),而应将其视为安全文本(无论是否为 HTML)。