我无法制作基于 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")。
我的代码:
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")。