2014-10-22 122 views
0

,因为我只是想获得的web2py更强的感觉真是基本的问题:web2py的子目录查看文件夹

我沿着

线创造了一系列的占位符控制器功能default.py
def order_entry(): 
    return locals() 

,并因为有很多意见我已经按功能例如组织

,所以我有

views/ 
    default/ 
      valuation/ 
        ... 

当我试图引用一个HTML文件中的子目录valuation我得到一个错误信息

invalid function (default/valuation) 

在web2py的书里解释说,这样视图和控制器的工作是

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

回答

1

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

当你有一个控制器和功能,如mycontroller/myfunction,如果函数返回一个字典,默认情况下,web2py的会看在/views/mycontroller文件夹名为myfunction.html(或myfunction.[extension]一个视图文件,如果URL有一个扩展和延伸是“html”以外的任何东西)。您可以为视图选择不同的名称和/或位置,但在这种情况下,您必须明确并在从函数返回之前将值设置为response.view

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

如果您对更分层的URL结构感兴趣,可以使用URL参数。当一个给定的函数被调用时,你可以使用参数有条件地执行不同的逻辑,甚至使用不同的视图(可以在子文件夹中组织,就像你在示例中所做的那样)。所以,在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的文档很有帮助。

+0

谢谢@Anthony--决定用系统工作更有效率,并且将每个文件夹放在视图中作为父母 - 这一切都很好。 – 2014-10-23 09:38:50

相关问题