2016-10-06 6 views
1

У меня этот вид, и я использую PermissionRequiredMixin на нем ... он отлично работает, но когда я перенаправляюсь к шаблону входа (задано в настройках LOGIN_URL) Мне нужно, чтобы оно показывало там сообщение «У вас нет разрешения на это». Любая идея, как это сделать, не создавая пользовательский декоратор, просто используя PermissionRequiredMixin?Django PermissionRequiredMixin перенаправить на шаблон регистрации с сообщением

from django.contrib.auth.mixins import PermissionRequiredMixin 

class MyView(PermissionRequiredMixin,View): 

    template = 'myapp/item_detail.html' 
    permission_required = 'myapp.change_item' 


    def get(self, request, *args, **kwargs): 
     #Query here 
     return render(request, self.template) 

Что нужно добавить для этого?

ответ

2

Вы должны использовать the messaging framework. Чтобы добавить свое сообщение, просто переписывает:

from django.contrib import messages 

class MyView(...): 
    ... 

    def handle_no_permission(self): 
     # add custom message 
     messages.error(self.request, 'You have no permission') 
     return super(MyView, self).handle_no_permission() 

вам также необходимо добавить следующие строки в base.html (или форме входа):

{% if messages %} 
<ul class="messages"> 
    {% for message in messages %} 
     <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li> 
    {% endfor %} 
</ul> 
{% endif %} 
1

Вы можете попробовать этот подход:

  1. Override handle_no_permission (Self) на ваш взгляд:

    from django.contrib import messages 
    from django.contrib.auth.mixins import PermissionRequiredMixin 
    
    class MyView(PermissionRequiredMixin,View): 
    
        template = 'myapp/item_detail.html' 
        permission_required = 'myapp.change_item' 
    
        def handle_no_permission(self): 
         messages.error(self.request, 'You don\'t have permission to do this') 
         return super(MyView, self).handle_no_permission() 
    
  2. Убедитесь messages are visible в шаблоне логина и django.contrib.messages добавлен в INSTALLED_APPS.