Jinja 模板将变量解析为文字字符串
Jinja template parses variable as literal string
我遇到了一个问题,Jinja 将我传递给它的变量视为文字字符串,这搞砸了 Flask 完成的 URL 路由工作。
app.py
- 每个 "course" 都有其指定的 URL,如 /course/<name>
.
所示
@app.route("/course/<name>")
@login_required
def course(name):
collection = mongo.db.courses
course = collection.find_one({"name": name})
return render_template("course.html", course=course)
profile.html
- 这些 "courses" 将显示在 profile.html
页面上,它们应该有 href
标签,引导它们正确呈现 course.html
页。
尝试 #1: 我尝试将 {{ course }}
传入 name
参数,但是 URL 被 Jinja 处理得一团糟它完全是一个字符串。
{% for course in courses %}
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-body">
<a href="{{ url_for('course', name='{{ course }} }}">{{ course }}</a>
</div>
</div>
</div>
{% endfor %}
尝试 #2: 我尝试设置一个 Jinja 变量并将其传递给 href
标记,但这并没有奏效。
{% for course in courses %}
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-body">
{% set url = url_for('course', name="{{ course }}") %}
<a href="{{ url }}">{{ course }}</a>
</div>
</div>
</div>
{% endfor %}
如何在不让 Jinja 将 href
标签视为文字字符串的情况下为每个 course
变量动态生成新的 href
标签?
{{
开始一个 Python 代码块。您在其中所做的事情遵循 Python 行为规则,而不是 Jinja 的规则。您正在将值 {{ course }}
作为 name
传递给 url_for
。只需使用 course
作为变量。
{{ url_for('course', name=course.name) }}
我遇到了一个问题,Jinja 将我传递给它的变量视为文字字符串,这搞砸了 Flask 完成的 URL 路由工作。
app.py
- 每个 "course" 都有其指定的 URL,如 /course/<name>
.
@app.route("/course/<name>")
@login_required
def course(name):
collection = mongo.db.courses
course = collection.find_one({"name": name})
return render_template("course.html", course=course)
profile.html
- 这些 "courses" 将显示在 profile.html
页面上,它们应该有 href
标签,引导它们正确呈现 course.html
页。
尝试 #1: 我尝试将 {{ course }}
传入 name
参数,但是 URL 被 Jinja 处理得一团糟它完全是一个字符串。
{% for course in courses %}
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-body">
<a href="{{ url_for('course', name='{{ course }} }}">{{ course }}</a>
</div>
</div>
</div>
{% endfor %}
尝试 #2: 我尝试设置一个 Jinja 变量并将其传递给 href
标记,但这并没有奏效。
{% for course in courses %}
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-body">
{% set url = url_for('course', name="{{ course }}") %}
<a href="{{ url }}">{{ course }}</a>
</div>
</div>
</div>
{% endfor %}
如何在不让 Jinja 将 href
标签视为文字字符串的情况下为每个 course
变量动态生成新的 href
标签?
{{
开始一个 Python 代码块。您在其中所做的事情遵循 Python 行为规则,而不是 Jinja 的规则。您正在将值 {{ course }}
作为 name
传递给 url_for
。只需使用 course
作为变量。
{{ url_for('course', name=course.name) }}