在多个URL上调用相同的函数

时间:2018-11-15 17:25:15

标签: python jquery ajax django

urls.py

 url(r'^level/ajax/reload/$', views.ajax_change_status, 
 name='ajax_change_status'),
 url(r'^level/(\d+)/ajax/reload/$', views.ajax_change_status, 
 name='ajax_change_status'),
 url(r'^level/(\d+)/(\d+)/ajax/reload/$', views.ajax_change_status, 
 name='ajax_change_status'),

我的urls.py中有这些urls。我试图在我的视图中调用ajax函数,以在用户单击响铃图标后将通知标志更新为0.通知标志位于base.html模板中。我用名称“ ajax_change_status”调用该URL。我希望所有这些URL都调用相同的Ajax函数。是否可以执行此操作,还是有更好的方法?当我单击第二个和第三个URL的响铃图标时出现500个服务器错误

views.py中的ajax函数:

def ajax_change_status(request):
  if request.is_ajax():
   try:
     Notification.objects.filter(receiver=request.user)
     .update(viewed=True)
     Addnotify.objects.filter(receiver=request.user)
     .update(viewed=True)
     FollowNotify.objects.filter(receiver=request.user)
     .update(viewed=True)
     HubNotify.objects.filter(receiver=request.user)
     .update(viewed=True)
    return JsonResponse({"success": True})
   except Exception as e:
      print(e)
      return JsonResponse({"success": False})

我的ajax jQuery:

var clicks = 0;

 $("#notify").on('click', function () {

    $.ajax({
    url: 'ajax/reload/',
    data: {
     },

    success: function (data) {

      if (data.success) {
                    console.log('ajax call  success.');

        $('#badge').html('0')
        $('#headnotify').html('NOTIFICATIONS (0)')
        // here you update the HTML to change the active to innactive
      }else{
        console.log('ajax call not success.');
      }
    clicks++;
    }
    });
   });

当我在第二个和第三个URL上尝试时,似乎没有进入ajax函数!

1 个答案:

答案 0 :(得分:1)

这些网址中的每个网址都应具有不同的名称。允许使用可选的url参数将很痛苦。如果您以不同的方式命名它们,将会更好(并且更加理智)。您的view函数可能应该允许那些传入,否则它们的目的是什么?

def ajax_change_status(request, param1=None, param2=None):
    ...

我个人喜欢使用关键字参数,因为它可以更好地说明url路径,但这取决于您。