Web.py通过表单提交上的ajax调用将参数传递给GET / POST函数

时间:2013-08-13 15:32:32

标签: python web.py

我有一个主页,其中包含GETPOST功能。 POST函数从搜索屏幕获取数据,并应通过ajax调用将此信息传递给worldMarkers类。这是独立的,因为应用程序的其他方面将需要它。

这样做的目的是让用户在index上按下提交,并且在POST通话期间,它可以限制检索到的结果。这个逻辑存在于worldMarkers类中。

class index(object):
    def GET(self):
        # do things to generate the page
        return html

    def POST(self):
        continents = web.input(search_continents=[])
        countries = web.input(search_countries=[])

        searchDict = {}
        if continents['search_continents']:
            searchDict['continents'] = continents['search_continents']
        if countries['search_countries']:
            searchDict['countries'] = countries['search_countries']

        markers = worldMarkers()

        # Yes, this just spits out the results, nothing fancy right now
        return markers.GET()

        #alternatively,
        #return markers.GET(searchDict)



class worldMarkers(object):        
    def __init__(self, **kargs):
        self.searchDict = None
        if 'searchDict' in kargs:
            self.searchDict = kargs['searchDict']

    def GET(self):
        print "SearchDict: %s" % (self.searchDict)
        # No searchDict data exists

第一个选项,没有markers.GET()的参数意味着我的搜索条件都没有通过。如果我markers.GET(searchDict),我收到此错误:

<type 'exceptions.TypeError'> at /
GET() takes exactly 1 argument (2 given)

如何将搜索参数传递给worldMarkers课程?

1 个答案:

答案 0 :(得分:2)

看起来您应该按照以下方式创建worldMarkers的实例,以便您的searchDict存在:

markers = worldMarkers(searchDict=searchDict)

现在,你在没有参数的情况下创建它:

markers = worldMarkers()

在这种情况下,条件if 'searchDict' in kargs为false且self.searchDict = kargs['searchDict']未运行。

而且,正如@TyrantWave指出的那样,你的GET并没有真正准备接受任何参数,因为它只被声明为def GET(self)。请参阅文档this section的最后一个示例代码。