dajaxice:将参数传递给 python 函数

Posted

技术标签:

【中文标题】dajaxice:将参数传递给 python 函数【英文标题】:dajaxice: passing an argument to a python function 【发布时间】:2013-06-23 17:03:21 【问题描述】:

使用 Dajaxice 我想将参数传递给 python 函数。

html 文件中我有以下语句

<a href="#" onclick="Dajaxice.myapp.sayhello(Dajax.process,'dir':3 )"> <i class="icon"></i></a>

在我的 ajax.ps 文件中我有这个函数

@dajaxice_register
def sayhello(request, dir):
    print(dir)

如果我删除了 html 和 python 文件中的第二个参数 dir,它会正常工作,但是有了 dir,我会收到错误消息“出现问题”。

有人知道这可能是什么问题吗?

【问题讨论】:

您是否尝试在装饰器中为您的sayhello 函数指定method='GET'?只是为了检查。 嗯,我觉得你说得有道理。如果我使用 method='GET' 注册它,我会收到错误消息:dajaxice_register() got an unexpected keyword argument 'method'。你知道这是为什么吗?看起来安装可能有缺陷? 这很奇怪。你知道这个异常发生在调用堆栈的什么地方吗?你使用的是什么版本的 dajaxice?在最新的 GitHub 代码上,我没有看到这样的异常,除非我错过了什么。 也许它只适用于字符串,试试:'dir': '3' 你也可以使用 JSON.stringify(data)。 【参考方案1】:

如果您使用 Python 3.*,则在模块 dajaxIce 中更改文件 venv/lib/python3.2/site-packages/dajaxice/views.py

    def safe_dict(d):
        """
        Recursively clone json structure with UTF-8 dictionary keys
        http://www.gossamer-threads.com/lists/python/bugs/684379
        """
        if isinstance(d, dict):
            return dict([(k, safe_dict(v)) for k, v in d.items()])
        elif isinstance(d, list):
            return [safe_dict(x) for x in d]
        else:
            return d

【讨论】:

【参考方案2】:

把sayhello改成:

def sayhello(request):
  my_dict=json.loads(request.POST['argv'])
  dir=my_dict['dir']
  print(dir)

【讨论】:

以上是关于dajaxice:将参数传递给 python 函数的主要内容,如果未能解决你的问题,请参考以下文章

将大量参数传递给 Python 函数的方法

声明一个带有数组参数的python函数并将一个数组参数传递给函数调用?

如何将附加参数传递给自定义 python 排序函数

将列表的元素作为参数传递给python中的函数

Python Pandas:将参数传递给 agg() 中的函数

如何将两个参数传递给由 ajax 函数调用的 python 函数?