2016-06-20 83 views
2

我遇到了一個問題,Jinja正在將一個變量作爲文字字符串傳遞給它,這會導致由Flask完成的URL路由工作。Jinja模板將變量解析爲文字字符串

app.py - 每個「課程」都有其指定的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 - 這些「課程」將顯示profile.html頁面上,他們應該有href標記,引導他們到合適的渲染course.html頁。

嘗試#1:我試圖傳遞{{ course }}name參數,但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:我試圖建立一個神社變量,並傳遞一個到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 %} 

如何動態生成每個course變量新href代碼,而無需神社對待href標籤爲文字字符串?

+0

你是什麼意思的「搞砸」?生成的html看起來像什麼? – Nicomak

回答

2

{{開始一段Python代碼。你在裏面做的事情遵循Python的行爲規則,而不是Jinja的規則。您將價值{{ course }}作爲name傳遞給url_for。只需使用course作爲變量。

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