#python #flask
#python #flask
Вопрос:
Я разрабатываю туристический веб-сайт с использованием flask. У меня есть папка destinations с названиями городов. При нажатии на выпадающий элемент навигации появляются эти города, и при нажатии на город страница должна быть перенаправлена в соответствующий город. Код навигации выглядит следующим образом;
<li><a href="#">Destinations</a>
<ul class="nav-dropdown">
<li><a href="destinations/london">London</a></li>
<li><a href="destinations/paris">Paris</a></li>
<li><a href="destinations/newyork">New York</a></li>
<li><a href="destinations/moscow">Moscow</a></li>
<li><a href="destinations/vegas">Las Vegas</a></li>
<li><a href="destinations/pataya">Pataya</a></li>
</ul>
</li>
The demo.py код выглядит следующим образом;
from flask import Flask, render_template
@app.route('/destinations/{id}', methods = ['GET'])
def destinations(id):
page = 'destinations/' id '.html'
return render_template(page)
Как правильно маршрутизировать эти страницы?
Комментарии:
1. Почему вы думаете, что это не очень хороший способ для маршрутизации?
2. Вы правы. На самом деле была одна глупая ошибка, которая предотвратила перенаправление. Это был {id}, который следует заменить на <id> . После исправления этой ошибки все работало нормально.
Ответ №1:
В вашем коде есть только небольшая ошибка. Вам нужно изменить фигурные скобки идентификатора в /destinations/{id}
toa /destinations/<id>
, и тогда код будет работать идеально…
Ответ №2:
У меня был бы контекстный процессор, который поддерживает словарь необходимых ссылок:
@app.context_processor
def processor():
""" This function injects vars into every page """
cities = {
'paris':'Paris',
'newyork': 'New York',
'moscow':'Moscow',
'vegas':'Las Vegas',
'pataya':'Pataya'
}
return dict(CITIES=cities)
В какой-то момент вы могли бы создать этот словарь из базы данных или другого хранилища.
Затем включите в свой шаблон:
<li><a href="#">Destinations</a>
<ul class="nav-dropdown">
{% for city_id,city_name in CITIES.items() %}
<li><a href="{{ url_for('destinations', id=city_id) }}">{{city_name}}</a></li>
{% endfor %}
</ul>
</li>
Эта url_for
функция генерирует URL-адрес, подобный: /destinations/paris
.
Этот метод позволяет избежать необходимости вручную записывать названия / идентификаторы городов в файл шаблона.