Python 要查看的Web2py映射控制器

Python 要查看的Web2py映射控制器,python,model-view-controller,web2py,Python,Model View Controller,Web2py,只是想知道是否有人可以在这里为我指出一个web2py应用程序的正确方向。到目前为止,我有2个控制器,但我将使用更多。我拥有的两个工具是index.py和dialog\u manager.py index.py此时返回一个空的dict,并在myapp/views/index/目录中公开index.html视图。在index.html中,用户可以单击界面中带有href属性的按钮,如下所示: <a href="{{=URL(c="diary_manager", f="diary_manager"

只是想知道是否有人可以在这里为我指出一个web2py应用程序的正确方向。到目前为止,我有2个控制器,但我将使用更多。我拥有的两个工具是
index.py
dialog\u manager.py

index.py
此时返回一个空的dict,并在
myapp/views/index/
目录中公开
index.html
视图。在
index.html
中,用户可以单击界面中带有
href
属性的按钮,如下所示:

<a href="{{=URL(c="diary_manager", f="diary_manager")}}">Diary</a>

如果单击该链接,它将调用
diary\u manager.py
控制器中的
diary\u manager
函数。到目前为止一切都很好

现在我遇到了一个问题。如果我从
dialog\u manager
函数返回
dict
,我必须将相应的视图放在
myapp/views/dialog\u manager/
目录中,这将被公开。另一方面,如果我不返回dict,我就根本无法公开视图

所以我有几个问题:

  • 当我返回dict时,为什么必须在视图中创建与控制器名称匹配的目录名

  • 有没有办法阻止这种情况,这样我就可以直接将所有视图放到views目录中

  • 如何强制不返回dict的控制器打开特定视图

  • 我希望所有这些都是清楚的

  • 我想MVC概念的整体理念是让你的生活更轻松,只要你遵循一些规则

  • 您可以设置response.view的值。此外,还有一个“重定向”

  • 你不能。只有当操作返回字典时(如web2py_手册中所述),才会调用该视图

  • 当我返回dict时,为什么必须在视图中创建与控制器名称匹配的目录名
  • 你不必这么做。这只是一种约定,因此您不必为每个操作显式指定关联视图的位置。如果您不喜欢这种约定,您可以将视图放在任何您想要的地方,并按您想要的方式命名它们,但是您必须为每个操作显式指定视图

  • 有没有办法阻止这种情况,这样我就可以直接将所有视图放到views目录中
  • 是的,您可以设置自己的约定,然后包含代码来设置
    响应的值。根据某些规则查看
    。例如,假设您将所有视图文件放在顶级
    /views
    目录中,并使用模式
    [controller].[function].[extension]
    命名它们。在这种情况下,可以在模型文件中包含以下行:

    response.view = '%s_%s.%s' % (request.controller, request.function,
                                  request.extension)
    
    如果上面的代码在模型文件中,它将在每个请求上执行,因此它将为每个控制器/操作正确设置视图文件

  • 如何强制不返回dict的控制器打开特定视图
  • 你为什么要这么做?如果您没有要返回的内容,只是想执行一个视图,那么可以返回一个空字典

    或者,您的函数可以直接渲染视图并返回渲染输出:

    def myfunction():
        [some code]
        return response.render()
    

    response.render()
    可选地接受第一个参数(即视图文件名)和第二个参数,这是视图环境中可用的变量字典。

    如果您的函数是
    日记管理器
    ,那么您相应的视图应该是
    myapp/views/diary\u管理器
    而不是
    myapp/views/diarymanager
    @JoeR您确实是对的,这是我的一个输入错误。谢谢,这一切都是有意义的