是否可以根据development.ini或production.ini中的特定用户定义设置更改视图/模板的内容.
举个例子说我正在开发一个列出班级所有学生的金字塔网络应用程序.后端数据库只有一个表 - "学生".现在我开发了一个可选脚本,它还为数据库添加了一个表'teacher'.理想情况下,web-app应该能够针对这两种情况运行.如果缺少教师表,则不会查询它并只打印学生详细信息.如果教师表存在,它将打印教师的姓名以及学生的姓名.
在我看来,这可以通过以下方式之一完成 -
所以我的问题是我应该使用哪种方法?如果要将设置变量传递给视图,该怎么做?是否有一种处理这个问题的标准方法?
为教师+学生和学生页面保留单独的路线(URL).问题是当你只有学生信息时,你无法阻止人们实际呼叫前者.
啊,但你可以!将它与数字2结合起来:在.ini文件中添加一个teacher_enabled = true/false设置,然后你可以使用类似这样的代码:
from pyramid.threadlocal import get_current_registry
from pyramid.httpexceptions import HTTPFound
#Define some awesome student views here
@view_config(name='student')
def student(request):
return HTTPFound('Foo!')
if get_current_registry().settings['teacher_enabled']:
#Some awesome student and teacher views here
@view_config(name='student_and_teacher')
def student_and_teacher(request):
return HTTPFound('Bar!')
Run Code Online (Sandbox Code Playgroud)
3号也是可行的.请记住: 要求宽恕比获得更容易.所以你可以这样做:(以SQLAlchemy为例)
from your_models.teacher import Teacher
from sqlalchemy.exc import NoSuchTableError
try:
teacher = session.query(Teacher).filter(Teacher.id==42).first()
except NoSuchTableError:
teacher = Teacher('Unknown')
Run Code Online (Sandbox Code Playgroud)