Колба Навбар url_for
Есть ли лучший способ связать элементы навигационной панели во Flask с JinJia2?
Я не хочу создавать маршрут для каждого элемента в моей панели навигации для render_template
на эту страницу HTML
@main.route('/')
def index():
return render_template('index.html')
<li><a href="{{ url_for('main.index') }}">Home</a></li>
Я попытался создать другой маршрут с переменной, но он работает только с HTML-страницей в template
корень папки
@main.route('/<page>')
def show(page):
return render_template('%s.html' % page)
<li><a href="{{ url_for('main.show', page='profile') }}">My Profile</a></li>
Если я хочу получить страницу под template/team
папка, возвращает ошибку 500
<li><a href="{{ url_for('main.show', page='team/members') }}">Members</a></li>
Я делаю это правильно, чтобы связать Navbar? Как я могу исправить свой маршрут, чтобы он работал идеально, или есть лучший способ сделать это?
2 ответа
Решение
По умолчанию переменные в маршрутах соответствуют строкам.
@main.route('/<page>')
это то же самое, что
@main.route('/<string:page>')
Чтобы включить каталог, нужно указать ему путь.
@main.route('/<path:page>')
def show(page):
return render_template('%s.html' % page)
Это будет соответствовать
url_for('main.show', page='profile')
так же как
url_for('main.show', page='team/members')
Вы можете добавить более одного маршрута:
@main.route('/')
@main.route('/<page>')
def showpage(page=None):
if page:
# called with page parameter
return render_template('%s.html' % page)
else:
# called with no parameters
return render_template('index.html')
По шаблону:
<li><a href="{{ url_for('main.showpage') }}">Home</a></li>
<li><a href="{{ url_for('main.showpage', page='profile') }}">My Profile</a></li>