博客文章页面开发
在app下views.py中添加响应函数page(对应文章内容页面)
点击博客主页面的文章链接会跳转到文章内容页面,实际上传递了点击的文章的唯一标识(主键 也就是django自己添加的id)
因此,在page方法里面添加参数article_id来传递主键id
获取文章对象
渲染到HTML
from django.shortcuts import render
from django.http import HttpResponse
from . import models
def index(request):
arts = models.Article.objects.all()
return render(request,'blog/index.html',{'articles': arts})
def page(request,article_id):
art = models.Article.objects.get(pk=article_id)
return render(request, 'blog/page.html', {'article': art})
创建templates下的page.html(文章内容页面)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>page</title>
</head>
<body>
<h1>{{ article.title }}</h1>
<br/>
<h3>{{ article.content }}</h3>
<br/><br/>
<a href="#">修改文章</a>
</body>
</html>
关键:URL参数传递
每个响应函数对应一个URL
刚写的page响应函数多了一个参数,要在URL中体现出来
不同文章对应不同id localhost:8000/blog/article/1 ....article/2 对应不同文章
(?P<article_id>[0-9]+) 正态表达式匹配到的数字以article_id作为组名去匹配 组名必须和响应函数中的参数名保持一致
使用(?P<>\d+)的形式捕获值给<>中得参数,比如(?P<article_id>\d+),当访问/blog/article/3时,将会将3捕获给article_id,这个值会传到views.ArticleDetailView,这样我们就可以判断展示哪个Art
在APP下的urls.py中加入
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index),
url(r'^article/(?P<article_id>[0-9]+)$', views.page),
]
打开服务器
localhost:8000/blog 到博客主页面
localhost:8000/blog/article/1 到主键为1的文章页面(数据库models里的设置)
localhost:8000/blog/article/2 到主键为2的文章页面