使用 Django 通过 AJAX URL 传递参数

Jay*_*Jay 5 javascript python django ajax

下面是我的代码。'n' 在控制台中正确记录,如果我手动将 'n' 的值输入到url: '{% url "delete_photo" iddy=2%}'. 唉,当我尝试使用 'n' 作为变量(见下文)时,它给了我一个反向匹配未找到的错误。有人能帮忙吗?

javascript

 function test(n){
    console.log(n);
    $.ajax({
      type: 'get',
      url: '{% url "delete_photo" iddy=n%}',

      datatype:'json',
      success: function(data){
                alert(n)
                console.log(data)
                console.log(n)
                },
      error: console.log("SSS"),

    });}
Run Code Online (Sandbox Code Playgroud)

html

{% for t in photos %}
<div id="photobox" ><img id="img_pb3"src="{{t.photo.url}}">
<div><a><span onclick="test({{t.id}})" class="closeBtn">&times;</span></div></a>
</div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

网址

urlpatterns = [
     path('', views.explore, name='explore'),
     path('home/', views.home, name='home'),
     path('home/comment', views.comment, name='comment'),
     path('home/photo_del/<iddy>', views.delete_photo, name='delete_photo')
]
Run Code Online (Sandbox Code Playgroud)

意见

def delete_photo(request, iddy):

    data = {'a':iddy, 'b': iddy}
    return JsonResponse(data, safe=False)
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 3

你不可能这样做。您从根本上误解了后端 Django 代码和前端 Javascript 代码之间的关系。Django 模板在服务器上进行全面评估,此时模板标签将转换为纯 HTML 文本。因此,Javascript 函数(在浏览器本身上运行的时间要晚得多)无法传递要在模板标记中使用的参数。

执行此操作的唯一方法是使用虚拟值呈现 URL(您知道该值不会出现在 URL 本身中),然后使用普通的 JS 字符串替换函数将 JS 中的值替换为参数中的值。

说实话,最好从 URL 中完全删除 ID。除此之外,删除操作应该是 POST,而不是 GET - 您不希望 Googlebot 意外抓取您的网址并删除您的所有项目 - 并且通过 POST,您可以发送已发布数据中的 ID。

  • 谢谢你!我就是这样做的。function PhotoDelete(n){ v​​ar patch = '{% url "delete_photo" iddy=0 %}'.replace('0', n); $.ajax({ type: 'post', url: patch, datatype:'json', success: function(data){ var foo = document.getElementById('photobox'+n); foo.style.display='none '; }, 错误:console.log("错误!"), });} (2认同)