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函数并将一个数组参数传递给函数调用?