我遇到了一个问题,Jinja 将我传递给它的变量视为文字字符串,这会破坏 Flask 完成的 URL 路由工作。
app.py - 每个“类(class)”都有其指定的 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 - 这些“类(class)”将显示在 profile.html 页面上,并且它们应该有 href 标签,将它们引导到适当呈现的 course.html 页面。

尝试 #1: 我尝试将 {{ course }} 传递到 name 参数中,但由于 Jinja 将其完全视为字符串,因此 URL 困惑。
{% 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 %}

如何为每个 href 变量动态生成新的 course 标签而不让 Jinja 将 href 标签视为文字字符串?

最佳答案

{{ 开始一段 Python 代码。你在里面做的事情遵循 Python 行为规则,而不是 Jinja 的行为规则。您将值 {{ course }} 作为 name 传递给 url_for 。只需使用 course 作为变量。

{{ url_for('course', name=course.name) }}

关于python - Jinja 模板将变量解析为文字字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37914007/

10-16 03:16