2 votes

Le modèle Jinja analyse la variable comme une chaîne littérale.

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 ?

2voto

dirn Points 10695

{{ commence un bloc de code Python. Les choses que vous faites à l'intérieur de ce bloc suivent les règles de comportement de Python, pas celles de Jinja. Vous passez la valeur {{ course }} comme name a url_for . Il suffit d'utiliser course comme une variable.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X