代码改变世界

129-django工程中,在views函数里,让页面跳转到其他app的模板页面(跨app跳转)

2020-08-30 17:12  lzhshn  阅读(1596)  评论(0编辑  收藏  举报

两个工程都是一模一样的格局,定义自己的urls.py文件,include到项目的根urls里,然后编写自己的views函数,自己的templates。

 

要实现跳转很简单,首先看原来的views函数:

 

from django.shortcuts import render, get_object_or_404, reverse
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib.auth import authenticate
from django.contrib.auth.models import User
from .models import ExUser
from .forms import UserLoginForm, UserRegForm


def login(request):
    if request.method != 'POST':
        form = UserLoginForm
        context = {'form': form}
        return render(request, 'login.html', context)
    else:
        username = request.POST['username']
        password = request.POST['password']
        login_user = authenticate(request, username=username, password=password)
        if login_user is not None:
            return HttpResponseRedirect(reverse('simplesite:login_ok'))
        else:
            return HttpResponse('login wrong!')

  

可以发现,当登录成功后,需要跳转到其他app的页面,比如是一个登录成功后的页面。因为我们为注册和登录功能专门设置了一个app,而实际的内容肯定放在另一个app里,这就涉及到了跨app跳转。

具体的做法是:

先完成2个引用:

from django.shortcuts import render, get_object_or_404, reverse
from django.http import HttpResponseRedirect, HttpResponse

然后使用写法:

return HttpResponseRedirect(reverse('simplesite:login_ok'))

最关键的写法是reverse里的内容:用引号包括,url的命名空间(通常等于app名称): 某个path的名称

 

完成这一步后,后续就是simplesite内部的逻辑,从url——》views函数——》模板。