【问题标题】:Django parsing argumentsDjango 解析参数
【发布时间】:2011-05-24 13:20:09
【问题描述】:

我正在使用 AJAX 调用从服务器获取数据:

$.ajax({
 type: 'POST',
 url: '/simple/gd/',
 dataType: 'json',
 data: {t : "PL"},
 success: function(data) {
 var newd = data['t'];
  alert('Load was performed: ' + newd);
 }
});

在服务器上,urls.py 是:

(r'^simple/gd/(?P<data>.*)$', 'simple.views.getData'),

到达服务器的 url 是 http:/localhost/simple/gd/?t=PL

但由于某种原因,我无法使用“?t=PL”或“t=PL”作为“数据”参数调用 getData(request, data)。 “数据”始终为空。

我做错了什么?

【问题讨论】:

    标签: python ajax django


    【解决方案1】:

    如果您使用 type: 'POST' ,则数据不会作为查询字符串附加到 URL。

    相反,它包含在请求对象的 POST 字典中。

    因此,为了返回触发警报的内容,您需要呈现一个可以解释为 json 数据的字符串,类似于:

    (r'^simple/gd/$', 'simple.views.getData'),
    
    def getData(request):
        posted_t = request.POST['t']
        # Do some stuff with posted_t
        server_side_var = "Yay"
        return HttpResponse(u"{t:%s}" % server_side_var)
    

    【讨论】:

      【解决方案2】:

      那是因为t=PL不是路径的一部分,它是查询字符串(路径,粗略地说,是?之前的那位,查询字符串是?之后的那一位)。

      我个人建议更改您的urls.py 如下:

      (r'^simple/gd/$', 'simple.views.getData'),
      

      然后,通过以下方式调整您的视图功能:

      def getData(request, data):
          print data
      

      类似于:

      def getData(request):
          print request.GET.get('t', None)
      

      【讨论】:

      • 如果我的“数据”更复杂怎么办?例如 data = { t: "me", m : { a : "you", b : "we"}} 我想按原样获取整个“数据”,并用 python 解析它
      • 如果你想要路径中的数据,那么它只能是平面数据(除非你会变得非常聪明!) /me/you/we/ - 读取 POST 变量有什么问题?
      猜你喜欢
      • 2017-02-17
      • 2016-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 1970-01-01
      • 2019-01-14
      相关资源
      最近更新 更多