2016-06-20 2 views
2

У меня проблема, когда Jinja обрабатывает переменную, которую я передаю ей как литеральную строку, которая закручивает работу маршрутизации URL, выполняемую Flask.Jinja шаблон анализирует переменную как литерал string

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

Как я могу динамически генерировать новые href тегов для каждого переменной course без Дзиндзя лечения href тегов как символьная строка?

+0

Что вы подразумеваете под «перепутали»? Как выглядит сгенерированный html? – Nicomak

ответ

2

{{ начинает блок кода Python. Вещи, которые вы делаете внутри, следуют правилам поведения Python, а не правилам Jinja. Вы передаете значение {{ course }} как name в url_for. Просто используйте course как переменную.

{{ url_for('course', name=course.name) }} 
Смежные вопросы