博客页面概要:
博客主页面
├───文章标题列表(超链接)
|___发表博客按钮(超链接)
博客文章内容页面
├───标题
├───文章内容
|___修改文章按钮(超链接)
博客撰写页面
├───标题编辑栏
├───文章内容编辑区域
|___提交按钮
博客主页面:
列表编写思路:
取出数据库中所有文件对象
将文章对象打包成列表传递到前端
views.py
# coding:utf-8
from django.shortcuts import render
from . import models
def index(request):
articles = models.Article.objects.all() #从数据库中取数据得到一个列表
return render(request, 'index.html', {'articles':articles}) #传递给前段
前端列表把文章以标题超链接的形式逐个列出
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>nic的博客</title>
</head>
<body>
<h2>
<a href=" ">添加新文章</a> <!--添加新文章的超链接-->
</h2>
{% for article in articles %} <!--列表for循环-->
<a href=" ">{{article.title}}</a> <!--文章标题超链接-->
<br/>
{% endfor %} <!--注意for循环结束标志 -->
</body>
</html>
博客文章内容页面:在app下views.py中添加响应函数article_page以响应对应文章内容页面:
def article_page(request,article_id): #添加参数article_id来传递主键id
article = models.Article.objects.get(pk=article_id) #根据主键获取到相应文章对象
return render(request, 'article_page.html', {'article': article})
新建article_page.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>article page</title>
</head>
<body>
<h2>{{ article.title }}</h2>
<br/>
{{artitle.content}}
<br/>
<br/>
<a href="">修改文章</a>
</body>
</html>
URL参数传递 :
每个响应函数对应一个URL
在app下的urls.py中设置响应函数对应的URL
url(r'^article/(?P<article_id>[0-9]+)$', views.article_page())
(?P<article_id>[0-9]+) 匹配到的数字以article_id作为组名去匹配,组名必须和响应函数中的参数名保持一致,使用(?P<>\d+)的形式将捕获值传给给<>中的参数,比如(?P<article_id>\d+),当访问/blog/article/3时,将会将3捕获给article_id,从而从数据库中取出相应主键的article
template中可以用 {% url ‘app_name : url_name’ param %}来表示目标地址
其中
app_name:应用命名空间的名称
url_name:链接名
param:地址的参数
app_name和url_name 都在url中配置
根urls.py中添加:
url(r'^nic/', include('blog.urls',namespace='article')) #该应用的命名空间
app下的url中添加:
url(r'^article/(?P<article_id>[0-9]+)$', views.article_page,name='article_page')
相应的HTML文件的超链接中添加:<a href="{% url 'blog:article_page' article_id %}">{{article.title}}</a> <!--文章标题超链接-->
则第一篇文章对应的URL为localhost:8000/nic/article/1