【发布时间】:2014-03-07 04:51:38
【问题描述】:
在我的 app.py 文件中,我将导航存储在字典中。键是主导航,值是子菜单。
navigation = {"Search": ["Google","Yahoo","Bing"]}
在我的 layout.html 模板(我的主模板文件)中,我想调用 dict 来生成我的导航。对我来说,这样做是有意义的,因为它将在每个页面上持续存在。但是,对于我拥有的每个视图,我都必须定义“导航”。这似乎是多余和不必要的。
这引出了我的问题,构建网站的适当方式是什么。我不想硬编码每个链接。如果我决定更改应用程序提供的内容,我希望将更改通过站点级联到我使用导航字典的所有其他区域。
结构示例:
#app.py
navigation = {"Search": ["Google","Yahoo","Bing"]}
def my_view():
return render_template('my_view.html')
#layout.html
{% for link in navigation %}
{{ link }}
{% endfor %}
要解决我的问题,我只需将导航全局添加到视图中。
return render_template('my_view.html', navigation=navigation)
我不想为每个视图添加导航。感觉多余,尤其是当您可以拥有数十个视图时。
【问题讨论】:
-
你能在所有视图之外定义导航,使其基本上是全局的吗?
-
@Totem 我很确定它是一个全球性的。我将提供一个正在发生的事情的例子。如果我加载 /login,它将调用登录视图,该视图将调用扩展 layout.html 的 login.html 模板。登录视图看到布局模板上使用了“导航”并引发错误,因为尚未告知视图导航的含义。
-
您的模板中是否包含 {{ }} 导航?
-
@Totem 是的。我做了这样的事情: {% for link in navigation %}{{ link }}{% endfor %} on my layout.html file.
-
如果您希望导航出现在扩展 layout.html 上的所有页面,并且导航在 layout.html 上的 {{% block content %}} 之外,那么它应该出现在所有这些页面上页。但是,如果它甚至在 layout.html 上都不起作用,那么您的问题可能在于您如何在模板中调用 dict
标签: python architecture flask