J'ai un problème où Jinja traite une variable que je lui passe comme une chaîne littérale, ce qui perturbe le travail de routage d'URL effectué par Flask.
app.py
- chaque "cours" a son propre URL, comme le montre l'exemple suivant /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
- Ces "cours" seront affichés sur le profile.html
page, et ils devraient avoir href
qui les conduisent vers le rendu approprié course.html
page.
Tentative n°1 : J'ai essayé de passer dans {{ course }}
dans le name
mais l'URL n'a pas été prise en compte car Jinja l'a traitée comme une chaîne de caractères.
{% 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 %}
Tentative n°2 : J'ai essayé de configurer une variable Jinja et de la passer à la fonction href
mais cela n'a pas fonctionné aussi bien.
{% 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 %}
Comment puis-je générer dynamiquement de nouvelles href
pour chaque course
sans que Jinja ne traite la variable href
comme une chaîne littérale ?