0

我正在尝试实现一个 ajax 函数,该函数将根据下拉选择的 id 值执行数据库查询。

下拉列表的 HTML 是

<form method = "POST" action="" >{% csrf_token %}
  <select name = "parentorgs" id = "parentorgs">
    {% for org in parentorg_list %}
      <option value = "{{org.parentorg}}" id = "{{org.parentorg}}" >{{ org.parentorgname }}</option>
    {% endfor %}
  </select>
</form>

一个 jQuerychange()函数用于获取选择的 ID 并将其传递给

function getData(id) {
  $.ajax({
    type : "POST",
    url : "getData/",
    data : {"parentorg" : id},
    datatype: "json",
    success : function(data) {
      console.log(data)
}
  });
}

依次调用视图函数

from django.shortcuts import render_to_response, render
from django.core.context_processors import csrf

def getData(request):
  c = {}
  c.update(csrf(request))
  return render_to_response("app/index.html", c)

Firebug 显示请求是通过 POST 进行的,并且方法 URL 是有效的。此外,该方法的 URL 已添加到 urls.py 中。

此时,它什么也没做,因为我只想看看方法的响应。此方法旨在执行模型查询并返回结果。

每次在下拉列表中选择一个项目时,我都会收到一个错误 403,描述该视图使用 ResponseContext 而不是 Context 作为模板。

需要做些什么来解决这个问题?

4

1 回答 1

1

根据文档

如果您使用 Django 的 render_to_response() 快捷方式来使用字典的内容填充模板,则默认情况下您的模板将传递一个 Context 实例(不是 RequestContext)。要在模板渲染中使用 RequestContext,请将可选的第三个参数传递给 render_to_response():RequestContext 实例。您的代码可能如下所示:

from django.template import RequestContext 
def getData(request):
  c = {}
  c.update(csrf(request))
  return render_to_response("app/index.html", c, context_instance=RequestContext(request))
于 2013-06-20T02:54:32.033 回答