这是一个非常基本的问题,因为我只是想对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
示例
答案 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上的文档很有帮助。