Создание ссылки на url-адрес приложения Flask в шаблоне jinja2
в моем приложении Flask у меня есть представление, которое отображает сообщение
@post_blueprint.route('/post/<int:year>/<int:month>/<title>')
def get_post(year,month,title):
# My code
чтобы отобразить последние 10 записей, у меня есть следующий вид:
@post_blueprint.route('/posts/')
def get_all_posts():
# My code
return render_template('p.html',posts=posts)
теперь, когда я показываю последние 10 сообщений, я хочу преобразовать Заголовок сообщения в гиперссылку. В настоящее время я должен сделать следующее В моем шаблоне jinja, чтобы достичь этого:
<a href="/post/{{year}}/{{month}}/{{title}}">{{title}}</a>
есть ли способ избежать жесткого кодирования url-адреса?
как url_for
функция которая использована для создания urls склянки как это:
url_for('view_name',**arguments)
Я пробовал искать один, но я не могу его найти.
1 ответов
Я чувствую, что вы задаете два вопроса здесь, но я сделаю выстрел...
для размещения url вы бы сделали это:
<a href="{{ url_for('post_blueprint.get_post', year=year, month=month, title=title)}}">
{{ title }}
</a>
для обработки статических файлов я бы настоятельно рекомендовал использовать менеджер активов, такой как Фляга-Активы, но сделать это с ванильной колбой вы делаете:
{{ url_for('static', filename='[filenameofstaticfile]') }}
если вы хотите получить больше информации, я настоятельно рекомендую вам прочитать. http://flask.pocoo.org/docs/quickstart/#static-files и http://flask.pocoo.org/docs/quickstart/#url-building
редактировать для использования kwargs:
просто подумал, что буду более тщательным...
если вы хотите использовать url_for
такой:
{{ url_for('post_blueprint.get_post', **post) }}
вы должны изменить ваш взгляд на что-то вроде этого:
@post_blueprint.route('/posts/')
def get_all_posts():
models = database_call_of_some_kind # This is assuming you use some kind of model
posts = []
for model in models:
posts.append(dict(year=model.year, month=model.month, title=model.title))
return render_template('p.html', posts=posts)
потом код шаблона может выглядеть так:
{% for post in posts %}
<a href="{{ url_for('post_blueprint.get_post', **post) }}">
{{ post['title'] }}
</a>
{% endfor %}
на данный момент я бы фактически создал метод на модели таким образом, вам не нужно превращать его в дикт, но идти так далеко зависит от вас :-).