首页 > 解决方案 > 如何从 Django View 函数中的另一个函数返回

问题描述

我在views.py中有一个函数

def login(request):
   actor = LoginActor(request)
   actor.authenticated_user() # Cannot use return here, this is problematic, we need to redirect here without using a return statement

   ctx = actor.get()

   if request.method == 'POST':
      ctx = actor.post()

      return render(request, 'user/forms/auth.jinja', ctx)
   return render(request, 'user/login.jinja', ctx)

并且函数中有一个重定向,authenticated_user()定义为:

def authenticated_user(self):
    if self.request.user and self.request.user.is_authenticated:
        return redirect('home')

如何在不调用 a 的情况下从初始视图返回return,基本上我想返回被调用函数,其中有一个returnin 被调用函数我正在使用 Django 2.1 和 Python 3.7

标签: pythondjango

解决方案


您应该将渲染和重定向都留给视图函数,并让您的实用程序函数authenticated_user只返回一个布尔值:

def authenticated_user(self):
    return self.request.user and self.request.user.is_authenticated

def login(request):
   actor = LoginActor(request)
   if actor.authenticated_user():
       return redirect('home')

   ctx = actor.get()

   if request.method == 'POST':
      ctx = actor.post()

      return render(request, 'user/forms/auth.jinja', ctx)
   return render(request, 'user/login.jinja', ctx)

推荐阅读