2015-04-21 3 views
0

Я использую Django. Я создал функцию для кнопки удаления. он работает нормально, но проблема в том, что: существует шаблон, который разделяется в двух местах (один для URL: /employer/job/edit, а другой для vendor/job/edit) шаблон одинаковый для обоих. мой код соответствует следующему, который отлично работает с/работодателем/работой/редактированием, но не работает для vendor/job/edit. Кнопка код:Ajax Call в Django

<a style="cursor:pointer;" class="delete" 
    data-pk="{{ i.id }}" data-appname="employer" data-modelname="office"> 
    <i class="fa fa-times font-18 iconcolor pt3 float-r" ></i> 
</a> 

Jquery IS:

$('.delete').click(function() { 
    appname = $(this).data('appname'); 
    modelname = $(this).data('modelname'); 
    pk = $(this).data('pk'); 
    delete_this = $(this); 
    $.ajax({ 
     url: "/delete_button/" + appname + "/" + modelname + "/" + pk + "/", 
     type: "DELETE", 
     success: function() { 
      // Remove the HTML Element which represents you data 
      delete_this.parent().parent().parent().parent().remove(); 

      $('#'+pk).remove(); 
      location.reload(true); 
     } 
    }); 
}); 

и моя функция, которую я написал в view.py является:

def delete_data(request, app_name, model_name, pk): 
    try: 
     model_name = get_model(app_name, model_name) 
     if request.method=='DELETE': 
      model_name.objects.get(id=pk).delete() 
      return HttpResponse('deleted', status=200) 
    except Exception, e: 
     return HttpResponse('error', status=500) 

, что это неправильно, я делаю. пожалуйста, помогите мне!

+0

есть ли способ получить имя приложения и имя модуля в коде кнопки, так как я беру pk = i.id ?? я думаю, что если есть такой путь, тогда проблема может быть решена. – NewPie

+0

Я немного смущен. Вы используете ту же кнопку в обоих шаблонах? –

+0

есть .. точно, фактически шаблон - тот же, что и доля в обоих. @AmalSurendran – NewPie

ответ

0

Отвечая на вопрос, поставленный в первом комментарии, если у вас есть

  • django.template.context_processors.request в Джанго> = 1,8
  • django.core.context_processors.request в Django < 1,8

контекст препроцессор добавлен в ваш TEMPLATE_CONTEXT_PROCESSORS , то вы можете получить доступ к имени текущего приложения в шаблоне через {{ request.resolver_match.app_name }}.

model_name вы можете предоставить через контекст, и если вы не используете TEMPLATE_CONTEXT_PROCESSORS, вы также можете указать его там.

views.py

# other view code ... 
c = Context({ 
    # possibly other context variables 
    'current_app': 'employer', 
    'model_name': 'office' 
}) 

return render(request, 'my/template.html', c) 

Таким образом, ваша ссылка Разметка будет выглядеть следующим образом

<a ... data-appname="{{ request.resolver_match.app_name }}" 
     data-modelname="{{ model_name }}">...</a> 

или при использовании жёстко прописанные имя приложения:

<a ... data-appname="{{ current_app }}" 
     data-modelname="{{ model_name }}">...</a> 

Подобно тому, как очевидное примечание, Будьте осторожны с таким кодом и убедитесь, что эти представления защищены с точки зрения параметров, которые они позволяют, достаточные разрешения пользователя для экземпляра запроса и модели, которые они смогут удалить.

+0

thnkx :) это работает для меня. – NewPie