带有按钮ID的Ajax发布URL,Django服务器

时间:2018-06-21 06:28:59

标签: ajax django

我试图通过单击一个按钮来删除列表中的元素,每个按钮都将元素的pk作为id

$('.delete').on('click', function (event) {
var evaluacion_id = this.id;
$.confirm({
    title: 'Desea Eliminar Evaluacion?',
    content: 'De ser asi no podra Recuperar estos datos',
    buttons: {
        confirm: function (evaluacion_id) {
            var url = "{% url 'delete-evaluacion' evaluacion_id %}"
            $.ajax({
                type:"POST",
                url: url,
                success: function(){
                    location.href="{% url 'evaluaciones-psicologo' informe.proceso.pk %}"
                }
            }); 
        },
        cancel: function () {
            $.alert('Continue Evaluando');
        },

    }
})

});

如果我执行$.alert("Delete "+evaluacion_id);而不是ajax函数,一切正常,它会向我显示正确的ID

但是,如果我使用ajax函数调用它,就会抛出这个

Reverse for 'delete-evaluacion' with arguments '('',)' not found. 1 pattern(s) tried: ['INTRANET\\/delete-evaluacion/(?P<pk>\\d+)$']

还有我的urls.py

url(r'^procesos/EvaluacionesPsicologo/(?P<pk>\d+)$',views.evaluaciones_psicologo,name='evaluaciones-psicologo'),
url(r'^procesos/EvaluacionePsicologo/(?P<pk>\d+)$',views.evaluacion_psicologo,name='evaluacion-psicologo'),
url(r'^delete-evaluacion/(?P<pk>\d+)$', views.EliminarEvaluacion, name='delete-evaluacion'),

1 个答案:

答案 0 :(得分:1)

问题在于,模板标记{% url 'delete-evaluacion' evaluacion_id %}是在呈现模板时而不是在运行JavaScript时评估的。 Django不知道变量evaluacion_id,因此它尝试使用空字符串反转URL,该字符串与URL模式不匹配。

执行此操作的正确方法是获取URL模式并将其转换为模板URL格式,但这将需要深入研究Django URL解析的内部,这可能不值得麻烦。有一个库可以为您完成此操作:Django JS Reverse

一种更为实用的方法是使用伪ID来反转URL,然后在JavaScript中将其替换。

$('.delete').on('click', function (event) {
var evaluacion_id = this.id;
$.confirm({
    title: 'Desea Eliminar Evaluacion?',
    content: 'De ser asi no podra Recuperar estos datos',
    buttons: {
        confirm: function (evaluacion_id) {
            var url = "{% url 'delete-evaluacion' 9999 %}".replace('9999', evaluacion_id);
            $.ajax({
                type:"POST",
                url: url,
                success: function(){
                    location.href="{% url 'evaluaciones-psicologo' informe.proceso.pk %}"
                }
            }); 
        },
        cancel: function () {
            $.alert('Continue Evaluando');
        },

    }
})