如何以最通用的方式实现这一目标?我想到了覆盖get()
,但我必须覆盖太多的方法。还尝试使用as_view()
,但我无法从那里访问请求。
我还尝试在模板中添加<meta http-equiv="refresh" content="0;url" />
,但我认为这不是最佳方法。
答案 0 :(得分:10)
我怀疑你想要覆盖as_view
,除非你做的事奇怪。它返回一个用作视图的函数。它返回的函数只是调用dispatch
。
您可以覆盖所需的特定方法。例如get
,或者,如果要覆盖所有方法(get
,post
等),则应覆盖dispatch
。
from django.shortcuts import redirect
from django.views.generic import TemplateView
class MyView(TemplateView):
template_name = 'my_app/my_template.html'
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated():
return redirect('my-other-view')
return super(MyView, self).dispatch(request, *args, **kwargs)
CCBV.co.uk是学习django基于类的视图的一个很好的参考。 免责声明:我构建了它。
答案 1 :(得分:0)
我将稍作修改以复制@meshy的答案,request.user.is_authenticated
是一个布尔值,您不能调用它。只需在dispatch
方法中更改此位:
...
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated:
....