2016-06-20 12 views
2

Ich habe ein Problem, wo Jinja eine Variable behandelt, die ich es als eine literale Zeichenfolge übergeben, die die URL-Routing-Arbeit von Flask versaut.Jinja Vorlage analysiert Variable als Literal-String

app.py - jeder "Kurs" hat seine festgelegte URL, wie von /course/<name> gezeigt.

@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 - Diese „Kurse“ auf der profile.html Seite angezeigt werden, und sie sollten href-Tags haben, die sie in die entsprechend gerendert course.html Seite führen.

Versuch # 1: Ich habe versucht, in {{ course }} in den name Parameter übergeben, aber die URL wurde vermasselt wie Jinja es als insgesamt String behandelt.

{% 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 %} 

Versuch # 2: Ich habe versucht, eine Jinja variable Einrichtung und nebenbei, dass an den href Tag, aber dies nicht so gut funktionierte.

{% 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 %} 

Wie kann ich dynamisch neue href-Tags für jedes course Variable erzeugen, ohne dass Jinja die href Tags als Zeichenkette behandeln?

+0

was meinst du mit "vermasselt"? Wie sieht das generierte HTML aus? – Nicomak

Antwort

2

{{ beginnt einen Block von Python-Code. Dinge, die Sie darin tun, folgen Python-Verhaltensregeln, nicht denen von Jinja. Sie übergeben den Wert {{ course }} als name an url_for. Verwenden Sie einfach course als Variable.

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