2016-06-20 28 views
2

Jinjaが変数を扱っているときに問題があります。これは文字列として渡されています。これはFlaskによって行われたURLルーティング作業を妨害します。Jinjaテンプレートは変数をリテラル文字列として解析します

app.py - 各「コース」には、/course/<name>で示すように、指定されたURLがあります。

@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ページに表示されます、そして、彼らは適切にレンダリングされたcourse.htmlページにそれらを導くhrefタグを持っている必要があります。

試み#1:私はnameパラメータに{{ course }}に渡してみましたが、神社は完全にそれを文字列として扱わとして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 %} 

どのように動的に神社が文字列リテラルとしてhrefタグを扱うことなく、各course変数の新しいhrefタグを生成することができますか?

+0

「混乱」とはどういう意味ですか?生成されたhtmlの外観はどうですか? – Nicomak

答えて

2

{{は、Pythonコードのブロックを開始します。あなたが内部で行うことは、Jinjaのものではなく、Pythonの動作規則に従います。値{{ course }}nameとしてurl_forに渡しています。変数としてcourseを使用してください。

{{ url_for('course', name=course.name) }} 
関連する問題