使用Django通过AJAX URL传递参数

时间:2019-03-07 19:19:56

标签: javascript python ajax django

下面是我的代码。 'n'在控制台中正确记录,并且如果我在url: '{% url "delete_photo" iddy=2%}'中手动输入'n'的值,一切将正常工作。 las,当我尝试使用“ 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"),

    });}

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 %}

网址

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')
]

观看次数

def delete_photo(request, iddy):

    data = {'a':iddy, 'b': iddy}
    return JsonResponse(data, safe=False)

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

也许是这样的:

    <a class="closeBtn" href="{% url 'delete_photo' iddy=t.id %}" id="{{t.id}}"></a>

然后您可以使用attr检索引用:

$.ajax({ 
url: $('.closeBtn').attr("href"),
data: { "iddy": $('.closeBtn').attr("id")},
.....

})