переменная jinja для корневого каталога flask-app

Я разрабатывал приложение, используя очень простую в использовании систему Flask, и я использовал шаблон jinja для выпишите кучу ссылок, соответствующих страницам во Flask, которые определяются примерно так:

@app.route(/<var1>/<var2>)
...
...

на тестовом сервере эти ссылки работают нормально, однако, когда я перехожу с тестового сервера на сервер за прокси, у меня возникает проблема, когда ссылки href не учитывают дополнительное имя каталога, вставленное моим прокси.

#where a link should read:
server:/myapp/<var1>/<var2>
# it acually puts out:
server:/<var1>/<var2>

мой шаблон jinja выглядит так, но мне интересно, есть ли способ вместо обратной косой черты указать переменную, указывающую корневой каталог.

{% block navigation %}
{% for record in db.values() %}
 <li><a href="/{{db.name}}/{{record.name}}">{{record.name}}</a></li>
{% endfor %}
{% endblock %}

Любая помощь будет принята с благодарностью. Спасибо команде Flask!


person zach    schedule 23.02.2012    source источник


Ответы (2)


Во-первых, как сказал @reclosedev, вы можете генерировать URL-адреса с помощью функции url_for ( предполагая, что функция просмотра называется myview:

<a href="{{ url_for('myview', var1=db.name, var2=record.name) }}">

Во-вторых, если вы используете обратный прокси-сервер, оберните приложение WSGI этим декоратором, который обновляет среду запроса, чтобы Flask генерировал правильные URL-адреса.

person Alex Morega    schedule 23.02.2012
comment
спасибо, Алекс, на самом деле я использую этот фрагмент, но ссылки, которые я сгенерировал в своем шаблоне, не обновлялись с учетом новых местоположений. спасибо. - person zach; 23.02.2012

Может быть, вы ищете функцию url_for?

<li><a href="{{ url_for('view_func_name', 
                        var1=db.name, 
                        var2=record.name) }}">{{record.name}}</a></li>
person reclosedev    schedule 23.02.2012
comment
Кроме того, если вы используете обратный прокси-сервер, ознакомьтесь с этим фрагментом flask. - person Alex Morega; 23.02.2012
comment
@AlexMorega, вероятно, этот фрагмент является решением проблемы OP, и я думаю, что его следует опубликовать как ответ. - person reclosedev; 23.02.2012