gpt4 book ai didi

python - Pyramid :根据设置修改站点内容

转载 作者:行者123 更新时间:2023-11-28 22:02:59 25 4
gpt4 key购买 nike

是否可以根据 development.ini 或 production.ini 中的特定用户定义设置更改 View /模板的内容。

举个例子,我正在开发一个 Pyramid 网络应用程序,其中列出了类(class)的所有学生。后端数据库只有一张表——“student”。现在我开发了一个可选脚本,该脚本还向数据库添加了一个表“teacher”。理想情况下,网络应用程序应该能够在这两种情况下运行。如果缺少 teacher 表,它不会查询它而只是打印学生详细信息。如果存在教师表,它将打印教师姓名和学生姓名。

在我看来,这可以通过以下方式之一来完成 -

  1. 只为教师+学生和学生保留单独的路线(网址)页。问题是你无法阻止人们实际上当您只有学生信息时调用前者。这将导致到不必要的错误页面
  2. 在 .ini 文件中使用设置 teacher_enabled=true/false。可以通过 settings['teacher_enabled'] 在 __init __.py 文件中访问该设置。仅配置一个路由(例如“home”、“/”),但根据 seeting 变量是真/假将其映射到不同的 View 。这将不允许使用 @view_config 装饰器,并且两种情况下的模板必须分开
  3. 再次使用设置变量,以某种方式将其传递给 View 。仅在 View 中进行相关查询。例如。 - 如果 teacher_enabled 为 True,则查询教师表,否则仅查询学生表。也将此变量传递给模板,然后决定是否要显示某些详细信息(例如教师姓名)。

所以我的问题是我应该使用这些方法中的哪一种?如果要将设置变量传递给 View ,该怎么做?是否有处理此问题的标准方法?

最佳答案

Keep separate routes (URLs) for teacher+student and student only pages. The problem is that you cannot stop people from actually calling the former when you only have student info.

啊,但是你可以!结合第 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!')

3号也是可行的。请记住:It's easier to ask for forgiveness than permission .所以你可以这样做:(以 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')

关于python - Pyramid :根据设置修改站点内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10240572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com