pet*_*ete 3 python django django-views
我试图在我的FormView中的get()方法中提供一些额外的上下文.我需要get()因为我需要首先运行一些逻辑,检查是否有潜在的重定向.我还需要访问请求对象(因为我需要检查会话数据).无法弄清楚该怎么做.以下简化代码..
尝试1:
class LoginView(FormView):
template_name = 'members/login.html'
form_class = LoginForm
def get(self, request):
# check if to redirect
if self.request.session.get('user'):
return redirect('/dashboard/')
# render page with extra context
else:
context = super(LoginView, self).get(request)
context['message'] = self.request.session['message']
return context
Run Code Online (Sandbox Code Playgroud)
没有错误,但模板中没有上下文.
尝试2:
class LoginView(FormView):
template_name = 'members/login.html'
form_class = LoginForm
def get_context_data(self, request, **kwargs):
# check if to redirect
if self.request.session.get('user'):
return redirect('/dashboard/')
# render page with extra context
else:
context = super(LoginView, self).get_context_data(**kwargs)
context['message'] = self.request.session['message']
return context
Run Code Online (Sandbox Code Playgroud)
入门 TypeError: get_context_data() takes exactly 2 arguments (1 given)
PS这项工作涉及一个解决方法Django的错误消息中间件似乎在本地完美地工作但在现场(Heroku)不是100%可靠,仅在某些页面上呈现.呃,沮丧的情况......
沟request参数的get_context_data方法.您还应该使用dispatch方法来检查用户是否已登录.
class LoginView(FormView):
template_name = 'members/login.html'
form_class = LoginForm
def dispatch(self, *args, **kwargs):
"""Use this to check for 'user'."""
if request.session.get('user'):
return redirect('/dashboard/')
return super(LoginView, self).dispatch(*args, **kwargs)
def get_context_data(self, **kwargs):
"""Use this to add extra context."""
context = super(LoginView, self).get_context_data(**kwargs)
context['message'] = self.request.session['message']
return context
Run Code Online (Sandbox Code Playgroud)