是否可以根据development.ini或production.ini中的特定用户定义设置来更改视图/模板的内容。金字塔:根据设置修改网站内容
作为一个例子说,我正在开发一个金字塔web应用程序,其中列出了该班的所有学生。后端数据库只有一个表 - “学生”。现在我开发了一个可选脚本,该脚本还向数据库添加了一个表“老师”。理想情况下,网络应用程序应该能够运行这两种情况。如果教师表丢失了,它将不会查询它并简单地打印学生的详细信息。如果教师表存在,它将打印教师姓名以及学生姓名。
在我看来,这可以通过以下方式之一完成 -
- 保持独立的路由(URL)的教师+学生与学生只有 页。问题是,当你只有学生信息时,你不能阻止实际拨打 的人拨打前者。这会导致 到不必要的错误页面
- 在.ini文件中使用设置teacher_enabled = true/false。该设置可以通过设置['teacher_enabled']在__ init __.py文件中进行访问。根据seeting变量是真/假来配置一条路线(如'home','/'),但将其映射到不同的视图。这将不允许使用@view_config装饰器和模板,这两种情况将不得不分开
- 再次使用设置变量,以某种方式将其传递给视图。只在视图中进行相关查询。例如。 - 如果teacher_enabled为True,则查询教师表,否则仅查询学生表。将此变量也传递给模板,并决定是否显示一些细节(例如教师姓名)。
所以我的问题是我应该使用哪种方法?如果设置变量要传递给视图,那怎么做?有没有解决这个问题的标准方法?
谢谢!!所以你可以通过get_current_registry()来使用设置变量。还有一件事 - 既然模型在两种情况下都会有所不同,建议保留教师模型定义并稍后处理异常(就像您已经完成的那样)或者在models.py中也应该看看设置变量是否为true/false然后才定义模型? – RedBaron 2012-04-20 05:34:02
您可以保留它,它不会造成任何伤害,并且可以让您免于处理源自不存在的模型的任何错误。此外,金字塔文档建议不要使用get_current_registry(),所以您应该尽可能少地使用它。 (request.registry是一个很好的选择,如果可用) – 2012-04-20 05:41:25
再次感谢。是request.registry可用(至少在视图中)。我想方法2听起来最好的保留视图函数和模板是分开的。虽然这会增加编码量,但选项3会导致不必要的编码复杂化。记住我处于哪种模式,并且使模板复杂化 – RedBaron 2012-04-20 05:50:42