我有一个相当简单的网站在烧瓶工作,所有的动力来自一个sqlite数据库。每个页面都作为行存储在页面表中,该表保存诸如路径、标题和内容之类的内容。
该结构是分层的,页面可以有父级。例如,“about”可能是一个页面,也可能是“about/something”和“about/cakes”。因此,我想创建一个导航栏,其中包含指向父级为“/”(/是根页)的所有链接的链接。此外,我想它也显示了网页,是开放的和所有家长的网页。
例如,如果我们在“about/cakes/muffins”,除了总是显示的链接外,我们还会看到“about/cakes”的链接,其方式如下:
- About/
- Cakes/
- Muffins
- Genoise
- Pies/
- Stuff/
- Contact
- Legal
- Etc.[/]
对于那些有子级的页面,使用尾随斜线,而对于那些没有子级的页面,则不使用斜线
代码:
@app.route('/')
def index():
page = query_db('select * from page where path = "/"', one=True)
return render_template('page.html', page=page, bread=[''])
@app.route('/<path>')
def page(path=None):
page = query_db('select * from page where path = "%s"' % path, one=True)
bread = Bread(path)
return render_template('page.html', page=page, crumbs=bread.links)
我已经觉得我在那里有两个功能违反了DRY。但是做导航会进一步破坏它,因为我也希望在错误页面上导航。
但我似乎找不到一个特别灵活的方法来做这件事。有什么想法吗?
您可以在一个函数中通过使用多个decorator来实现:)
就我个人而言,我将修改bread函数,使其也适用于路径
/
。如果只是向上下文中添加变量,那么我建议查看上下文处理器:http://flask.pocoo.org/docs/templating/#context-processors
“flasky”和pythonic的方法是使用基于类的视图和模板层次结构
首先阅读这两种方法的文档,然后可以基于此方法重构代码:
然后您可以执行以下操作: 为main_page.html和page_with_navigation.html创建单独的页面 然后你的每个页面“error.html,page.html,somethingelse.html”都基于其中一个。 关键是要动态地执行此操作:
将稍微修改准备方法:
以及您的模板: 主页.html
带导航的网页.html
page.html或其他任何页面。保持简单!
注意第一线。您的视图设置应该进入哪个页面,您可以通过设置navigation=of view类轻松地调整它。
相关问题 更多 >
编程相关推荐