Колба Навбар 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>
Другие вопросы по тегам