使用sweetAlert删除用户时URL变量值无法正常渲染问题
问题原因
你的问题核心在于Django模板标签的执行时机和JavaScript变量的执行时机不匹配:
- Django的
{% url %}是服务器端渲染标签,在页面加载前就已经解析完成,生成对应的URL字符串; - 而JavaScript的
id变量是客户端运行时的变量,服务器渲染模板时根本不知道这个变量的实际值,所以直接拼接后,服务器会把" +id+"当作字符串字面量处理,最终生成的URL是用字符串id作为参数的无效路径。
解决方案
这里提供两种最直接的修复方式:
方式一:在HTML中提前生成完整URL,传递给JS函数
直接在HTML的点击事件中,把Django渲染好的完整删除URL作为参数传给JS函数,避免在JS里拼接模板标签:
修改后的HTML代码
<td> <a href="#" onClick="delInscPart('{% url 'suppPartners' list.user_inscrit.username %}');"> <i data-feather="trash-2"></i>Supprimer </a> </td>
修改后的JavaScript代码
function delInscPart(url){ Swal.fire({ title: "Êtes-vous sûr de vouloir supprimer l'invité ?", text: "Si vous confirmez cette opération, vous supprimerez cet invité !", icon: "warning", showCancelButton: true, cancelButtonText: "Annuler", confirmButtonText: "Je confirme", reverseButtons: true, }).then(function(result){ if(result.isConfirmed){ window.location.href = url; console.log(url); } }); }
方式二:生成URL模板,客户端替换占位符
如果需要在JS中动态处理ID,可以先让Django生成一个带占位符的URL模板,再在JS里用实际ID替换占位符:
在HTML中添加URL模板(放在script标签中)
<script> // 让Django生成带占位符的基础URL const deleteUrlTemplate = "{% url 'suppPartners' '__USER_ID__' %}"; </script>
修改后的JavaScript代码
function delInscPart(id){ // 替换占位符为实际用户ID const url = deleteUrlTemplate.replace('__USER_ID__', id); Swal.fire({ title: "Êtes-vous sûr de vouloir supprimer l'invité ?", text: "Si vous confirmez cette opération, vous supprimerez cet invité !", icon: "warning", showCancelButton: true, cancelButtonText: "Annuler", confirmButtonText: "Je confirme", reverseButtons: true, }).then(function(result){ if(result.isConfirmed){ window.location.href = url; console.log(url); } }); }
注意事项
- 建议给SweetAlert的
icon属性设置值(比如"warning"),这样弹窗会显示对应的警告图标,提升用户体验; - 修正了原代码中的拼写错误:
Anuller改为Annuler,supprimé l invité改为supprimer l'invité等。
内容的提问来源于stack exchange,提问作者El Goumrii
相关产品推荐
相关产品推荐

