(三)页面重定向及模板渲染
程序员文章站
2022-06-27 11:52:28
...
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)