视图文件夹中的Web2py子目录

时间:2014-10-22 10:11:57

标签: web2py

这是一个非常基本的问题,因为我只是想对web2py有更强烈的感受:

我在default.py中创建了一系列占位符控制器函数,这些函数沿着

def order_entry():
    return locals()

因为我已经按功能

组织了很多观点

所以例如我有

views/
     default/
             valuation/
                  ...

当我尝试引用子目录valuation中的html文件时,收到错误消息

invalid function (default/valuation)

在web2py一书中,它解释了视图和控制器的工作方式

application/[controller]/view所以我理解它正在寻找一个名为default/valuation的控制器我的问题是 - 我可以在视图中使用子目录吗?如果有,怎么样?如果没有,我需要有单独的更高级别文件夹,每个文件夹都有自己的控制器,如何将(A Helper)从一个控制器视图(例如default/index.html)重定向到另一个控制器valuation/value.html示例

1 个答案:

答案 0 :(得分:1)

我不确定您在哪里看到application/[controller]/view,但是web2py路由会产生默认网址,例如/application/controller/function(请注意,它是控制器中确定网址的函数名称,而不是查看姓名)。您不通过创建视图层次结构来定义路由。视图与特定功能相关联,但它们对路由没有影响。

如果你有一个控制器和函数,如mycontroller/myfunction,如果该函数返回一个字典,默认情况下,web2py将在/views/mycontroller文件夹中查找名为myfunction.html的视图文件(或myfunction.[extension]如果网址有扩展名且扩展名不是" html")。您可以为视图选择不同的名称和/或位置,但在这种情况下,您必须明确并在从函数返回之前设置response.view的值。

您无法在子文件夹中嵌套控制器。您可以拥有default.py控制器和单独的valuation.py控制器,但不能拥有default/valuation.py控制器。

如果您对更多层次结构的URL结构感兴趣,可以使用URL args。当调用给定函数时,您可以使用args有条件地执行不同的逻辑,甚至可以使用不同的视图(可以在子文件夹中组织,就像您在示例中所做的那样)。因此,在default.py控制器中,您可以执行以下操作:

def valuation():
    action = request.args(0)
    response.view = 'default/valuation/%s.html' % action
    if action == 'order_entry':
        ...
        return dict()
    elif action == 'show_orders':
        ...
        return dict()

然后您将拥有/default/valuation/order_entry/default/valuation/show_orders等网址。

您可能会发现阅读dispatching上的文档很有帮助。