使用 Class 基于视图 (CBV) Django 2.1 Python 的重定向页面
Redirect page with Class Based View (CBV) Django 2.1 Python
我想根据用户的角色将用户定向到特定页面。我想在基于 class 的视图中实现类似的功能。
def home_redirect(request):
user_role = Profile.objects.get(user = request.user).role
if user_role in internal_users:
return redirect(reverse_lazy('home'))
else:
return redirect(reverse_lazy('event_list'))
我知道 RedirectView。但是我怎样才能在 CBV 中获取请求以获得 request.user.role
中的 user.role?我知道我可以在某些函数中获得 user.role within CBV 像这样:
class HomeRedirectView(RedirectView):
def get_context_data(self, **kwargs):
context = super(HomeRedirectView, self).get_context_data(**kwargs)
context['current_user'] = Profile.objects.get(user = self.request.user)
user_role = context['current_user'].role
return context
#Can't access user_role but if I could I would do something like this
if user_role in internal_users:
url = reverse_lazy('home')
else:
url = reverse_lazy('event_list')
如何在 CBV 中的 get_context_data() 之外访问 user_role?
在 RedirectView
[Django-doc], you do not need to implement a get_context_data
function, the URL is determined by the get_redirect_url
method [Django-doc] 中,因此您可以将其实现为:
class HomeRedirectView(RedirectView):
def <b>get_redirect_url</b>(self, *args, **kwargs):
user_role = Profile.objects.get(user=<b>self.</b>request.user).role
if user_role in internal_users:
return reverse('home')
else:
return reverse('event_list')
仅当 URL 是静态的时才设置 url
attribute [Django-doc],但是如果内容是非静态的,您可以实现 get_redirect_url
。
我想根据用户的角色将用户定向到特定页面。我想在基于 class 的视图中实现类似的功能。
def home_redirect(request):
user_role = Profile.objects.get(user = request.user).role
if user_role in internal_users:
return redirect(reverse_lazy('home'))
else:
return redirect(reverse_lazy('event_list'))
我知道 RedirectView。但是我怎样才能在 CBV 中获取请求以获得 request.user.role
中的 user.role?我知道我可以在某些函数中获得 user.role within CBV 像这样:
class HomeRedirectView(RedirectView):
def get_context_data(self, **kwargs):
context = super(HomeRedirectView, self).get_context_data(**kwargs)
context['current_user'] = Profile.objects.get(user = self.request.user)
user_role = context['current_user'].role
return context
#Can't access user_role but if I could I would do something like this
if user_role in internal_users:
url = reverse_lazy('home')
else:
url = reverse_lazy('event_list')
如何在 CBV 中的 get_context_data() 之外访问 user_role?
在 RedirectView
[Django-doc], you do not need to implement a get_context_data
function, the URL is determined by the get_redirect_url
method [Django-doc] 中,因此您可以将其实现为:
class HomeRedirectView(RedirectView):
def <b>get_redirect_url</b>(self, *args, **kwargs):
user_role = Profile.objects.get(user=<b>self.</b>request.user).role
if user_role in internal_users:
return reverse('home')
else:
return reverse('event_list')
仅当 URL 是静态的时才设置 url
attribute [Django-doc],但是如果内容是非静态的,您可以实现 get_redirect_url
。