如何在django中使用ajax从javascript调用python函数

时间:2018-05-18 20:51:10

标签: javascript python ajax django

我想在不刷新页面的情况下显示所选汽车的范围。这段代码没有给出错误,但也没有做到这一点。

的index.html

<select class="custom-select d-block w-100" name="car" id="car" onchange="display(this.value)">
                {% for car in cars_list%}
                    <option value="{{ car }}">{{ car }}</option>
                {% endfor %}
</select>

main.js

function display(value){
$.ajax({
type: "POST",
url: "/get_car_data/",
data: { car_model: value}
}).done(function(range) {
    alert("test")
    $("#range").html(range);
});
}

ajax_handler.py

def get_car_data(car_model):
cars_frame = pd.read_csv("C:/Users/David/Desktop/cars.csv", sep=';')
frame2 = cars_frame.set_index('Car', drop=True)
car_range = (frame2.loc[car_model]['Range'])
return car_range

urls.py

urlpatterns = [
url(r'^get_car_data/', ajax_handler.get_car_data, name='get_car_data'),]

1 个答案:

答案 0 :(得分:0)

我在这里看到的一个大问题,除非我不知情的代码,是你的观点(因为它丢失所有缩进而很难阅读)缺少两件事:

1)通过邮寄接受参数的任何方式。您期望视图的正常签名是:

def get_car_data(request, car_model):
    ```your code here```

在这种情况下,汽车模型将是url本身的一部分,而不是post请求,你只需要使用相应的模型名称进行AJAX访问url(或者假设名称可能有奇怪的字符,也许通过主键查找)。您还可以使用request.POST作为字典获取POST值,在这种情况下省略参数car_model并将其从POST字典中取出。

2)任何序列化它的方法都会导致返回的HTTP响应。如果您正在考虑使用HTML,那么这可能就像HttpResponse对象一样简单,该对象使用render返回包含信息的字符串甚至是模板。但你需要一些东西。