Вызовите ту же функцию на нескольких URL-адресах Django - PullRequest
0 голосов
/ 15 ноября 2018

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 у меня есть эти URL. Я пытаюсь вызвать функцию ajax, на мой взгляд, чтобы обновить значок уведомления до 0 после того, как пользователь нажмет на значок колокольчика. Значок уведомления находится в шаблоне base.html. Я называю URL с именем "ajax_change_status". Я хочу, чтобы все эти URL вызывали одну и ту же функцию ajax. Возможно ли это сделать или есть лучший способ? Я получаю сообщение об ошибке сервера 500, когда нажимаю на значок колокольчика со второго и третьего URL

Моя функция ajax в views.py:

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++;
    }
    });
   });

Похоже, что это не входит в функцию AJAX, когда я пытаюсь это на втором и третьем URL !!

1 Ответ

0 голосов
/ 15 ноября 2018

Каждый из этих URL должен иметь разные имена. Будет трудно учесть необязательные аргументы URL. Вам будет намного лучше (и более вменяемым), если вы просто назовете их по-другому. Ваша функция просмотра, вероятно, должна позволять передавать их, в противном случае, какова их цель?

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

И лично мне нравится использовать аргументы ключевых слов, так как они лучше объясняют путь URL, но это зависит от вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...