带有按钮id的Ajax Post URL,Django服务器

带有按钮id的Ajax Post URL,Django服务器,ajax,django,Ajax,Django,我试图通过单击一个按钮来删除列表中的一个元素,每个按钮都将元素的主键作为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: { conf

我试图通过单击一个按钮来删除列表中的一个元素,每个按钮都将元素的主键作为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(“删除”+评估id)代替ajax函数,一切正常,并显示正确的id

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

Reverse for 'delete-evaluacion' with arguments '('',)' not found. 1 pattern(s) tried: ['INTRANET\\/delete-evaluacion/(?P<pk>\\d+)$']
未找到参数为“(“”,)”的“delete evaluacion”的反向。尝试了1种模式:[“INTRANET\\/delete evaluacion/(?P\\d+)$”]
还有我的URL.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'),
url(r'^proceos/evaluationespsicologo/(?P\d+)$,views.evaluationes\u psicologo,name='evaluationnes-psicologo'),
url(r'^procesos/EvaluacionePsicologo/(?P\d+)$,views.evaluacion\u psicologo,name='evaluacion-psicologo'),
url(r“^delete evaluacion/(?P\d+)$”,views.eliminarevacion,name='delete-evaluacion'),

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

正确的方法是获取URL模式并将其转换为模板URL格式,但这需要深入研究Django的URL解析的内部结构,可能不值得这么麻烦。有一个图书馆可以为您提供:

一种更实用的方法是使用虚拟ID反转URL,然后在JavaScript中替换该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' 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');
        },

    }
})

只是使用虚拟ID进行了更改,得到了这个
[21/Jun/2018 03:24:53]“POST/INTRANET/delete evalucion/9999 HTTP/1.1”500 17963
,它没有进行替换抱歉,我的错误<代码>替换不修改字符串,它返回一个新字符串。我已经编辑了代码,现在将得到一些咖啡:)顺便说一句,我的政策是无效的用户输入(如无效的URL)永远不会导致500服务器错误。我建议捕获异常并返回404