【问题标题】:dajaxice: passing an argument to a python functiondajaxice:将参数传递给 python 函数
【发布时间】: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)。

标签: ajax django dajaxice


【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2015-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多