(三)页面重定向及模板渲染

1.页面重定向

页面重定向就是在访问旧的页面时,会跳到新的页面。
方法一:
直接redirect
新建的APP目录:book/views.py

from django.shortcuts import render,redirect,reverse
from django.http import HttpResponse
def article(request):
    # return  HttpResponse("旧的页面")
    #页面重定向
    return  redirect("/book/article_new/")
def article_new(request):
    return HttpResponse("新的页面")

book/urls.py

from django.contrib import admin
from django.urls import path,re_path
from . import views
urlpatterns = [
    path('index/',views.index),
    path('getArgs/',views.getArgs,{'name':'xiaoming'}),
    path('article/',views.article),
    path('article_new/',views.article_new)
]

redirect中的‘article_new’和path中’article_new’对应

方法二:
通过name属性名
name参数可以给url取一个合适的名字,在view或者模板中使用这个url,就只需要通过这个名字就可以了。name的目的是:防止url的规则更改,会导致其他用了这个url的地方都需要更改,如果取名字,就不需要做任何改动了。
book/views.py

def article(request):
    # return  HttpResponse("旧的页面")
    #页面重定向
    # return  redirect("/book/article_new/")
    return redirect(reverse('article_new'))
def article_new(request):
    return HttpResponse("新的页面")

book/urls.py

from django.contrib import admin
from django.urls import path,re_path
from . import views
urlpatterns = [
    path('index/',views.index),
    path('getArgs/',views.getArgs,{'name':'xiaoming'}),
    path('article/',views.article,{'name':'xiaoming'}),
    path('article_new/',views.article_new,name='article_new')
]

当book/views.py中重定向’article_new’时,会匹配path中name的属性。不管前面名字如何。

2.模板渲染

模板存放的位置
1.在主目录下创建一个templates目录用来存放所有的html的模板文件。
2.templates目录里面在新建各个以app名字命名的目录来存放各个app中模板文件。

目录如下,
在这里插入图片描述
可以在templates/book目录下新建html文件,
在这里插入图片描述

然后在根目录下的settings.py文件中拼接templates
在这里插入图片描述

render方法时django封装好用来渲染模板的方法。

下一步,

from django.template.loader import get_template
def book_index(request):
    #获取模板
    s = get_template('book/book_index.html')
    #渲染页面
    html = s.render({'name':'xiaoming'})
    return  HttpResponse(html)
from django.contrib import admin
from django.urls import path,re_path
from . import views
urlpatterns = [
    path('index/',views.index),
    path('getArgs/',views.getArgs,{'name':'xiaoming'}),
    path('article/',views.article,{'name':'xiaoming'}),
    path('article_new/',views.article_new,name='article_new'),
    path('book_index/',views.book_index)
]

在这里插入图片描述
‘xiaoming’这个name,就是在渲染页面的时候传的。

另外一种方法,

def book_index1(request,name):
    return render(request,'book/book_index.html',{'name':name})
 path('book_index1/<name>',views.book_index1)

也可以通过上下文管理器context传参,

def book_index1(request,name,age):
    return render(request,'book/book_index.html',context={'name':name,'age':age})
path('book_index1/<name>&<age>',views.book_index1)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44204361/article/details/102851835