我无法制作基于 crud 的搜索表单。为什么它不起作用?

I can't make a crud based search form. Why it is not working?

我的代码:

models/db.py

....
dbmy = DAL('mysql://user:user@localhost/test',migrate_enabled=False)
dbmy.define_table('Firewall', Field('disabled','text'),
                            Field('src_port_first','integer'),
                            Field('src_port_last','integer'),
                            Field('port_first','integer'),
                            Field('port_last','integer'),
                            Field('type','text'),
                            Field('Src_op','text'),
                            Field('src_ipaddr_first','text'),
                            Field('src_ipaddr_last','text'),
                            Field('src_netmask','text'),
                            Field('Dst_op','text'),
                            Field('dst_ipaddr_first','text'),
                            Field('dst_ipaddr_last','text'),
                            Field('dst_netmask','text'),
                            Field('Action','text'))
dbmy.commit()

controllers/select.py:

# -*- coding: utf-8 -*-
from gluon.tools import Crud
crud=Crud(dbmy)
def search():
    return dict(form=crud.search(dbmy.Firewall))

如果我尝试 127.0.0.1:8000/[app]/select/search/Firewall URL,页面会这样写:

invalid view (select/search.html)

当您的控制器操作 returns 字典时,web2y 需要关联的视图文件——在这种情况下,它将查找 /views/select/search.html。您必须创建该视图。

或者,您可以在这种情况下启用 generic.html view。请注意,在脚手架应用程序中,所有通用视图仅针对本地请求启用,但在其他情况下禁用(出于安全考虑)。

您还可以通过 response.view 指定不同的视图。

最后,鉴于您的控制器代码,没有理由将 "Firewall" 添加到您的 URL,因为 search 函数已经硬编码为搜索 db.Firewall table(其实search函数完全忽略了URL中的"Firewall")。