通过Ajax发送对象的主键

时间:2017-08-19 17:08:49

标签: python ajax django django-templates

如何通过AJAX发送 SELECTED 对象的主键(pk)。我试过{{pk}},但没有成功。我收到错误“未捕获错误”意外令牌}

{% extends 'homepage.html' %}
{% load staticfiles %}

{% block teacher_diary %}
<script language="JavaScript"  src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        $('#grade_list').change(function(){
        var element = document.getElementById("grade_list");
        var value = element.options[element.selectedIndex].value;
    $.ajax({
        url: "get_subject/",
        type: "get",
        data: {
            'grade_id': value.{{ pk }}
        },
        dataType: "json"
    });

})});
</script>
<select id="grade_list">
    {% for grade in grades %}
        <option >{{ grade }}</option>
    {% endfor %}
</select>

1 个答案:

答案 0 :(得分:0)

标识为value的变量没有任何名为{{pk}}的属性。在将HTML发送到客户端之前,使用双花括号保留用于模板的服务器端处理。客户端没有Django对象的概念。希望这具有直观意义。

就解决方案而言,这是我可能做的事情。首先,为每个选项提供一个自定义属性data-pk,用于存储服务器端的pk。

<select id="grade_list">
    {% for grade in grades %}
        <option data-pk={{grade.pk}} >{{ grade }}</option>
    {% endfor %}
</select>

然后,使用JavaScript访问pk(如果选择使用JQuery,则有更简单的方法)。

    var element = document.getElementById("grade_list");
    var value = element.options[element.selectedIndex];
    $.ajax({
        url: "get_subject/",
        type: "get",
        data: {
            'grade_id': value.getAttribute("data-pk");
        },
        dataType: "json"
    });