0

有没有更好的方法将 Flask 中的导航栏项目与 JinJia2 模板链接?

我不想为导航栏中的每个项目创建render_template到该 HTML 页面的路由

@main.route('/')
def index():
    return render_template('index.html')

<li><a href="{{ url_for('main.index') }}">Home</a></li>

我尝试使用变量创建另一个路由,但它仅适用于template文件夹根目录下的 HTML 页面

@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>

我这样做是否正确链接导航栏?如何修复我的路线以使其完美运行,或者有更好的方法吗?

4

2 回答 2

3

默认情况下,路由中的变量匹配字符串。

@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')
于 2014-08-13T00:45:18.833 回答
1

您可以添加多个路线:

@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>
于 2014-08-12T23:47:01.527 回答