文章目录
一、路由的写法 name的使用
二、修改页面
1.修改作者性别字段属性
choices属性:由元组组成的一个可迭代对象,用来给字段提供可选值。
使用如下代码可以使数字对应的性别汉语展示出来
效果如下
2.修改个人日志页
效果如下,滚动条很长,所有数据在一页显示
3.增加详情页面
模板: 使用的about页面进行修改,新建一个html articledetails.html把about全部复制然后进去修改
效果如下:
三、分页
分页:一个页面显示太多数据,效果不好需要分页处理
一般分为两种:
- 前端分页
- 后端将数据一次性全部提供给前端,前端通过js进行分页
- 优点:简单直接
- 缺点:传输数据需要时间,对数据库压力大
- 后端分页
- 在数据库查询时,指定查询范围,类似于sql中的limit,ORM中的切片。
django中提供了分页插件,paginator,专门负责提供分页功能,在django1.4版本之后才有。
增加多条数据
导入模块
1.增加多条数据
增加多条数据成功
2.分页提供的方法
from django.core.paginator import Paginator
def fytest(request):
## 使用django自带分页 Paginator 的时候 原数据要增加排序属性
article = Article.objects.all().order_by("-date")
# print(article)
# 每次显示 5条数据
paginator = Paginator(article,5) # 设置每一页显示多少条,返回一个Paginator 对象
# print (paginator.count) ## 返回内容总条数
# print(paginator.page_range) ## 可迭代的页数
# print(paginator.num_pages) ## 最大页数
page_obj= paginator.page(2)
print (page_obj) ## 可以有的页数的数据 表示的当前对象 <Page 20 of 21>
for one in page_obj:
print (one.content)
# print(page_obj.number) ## 当前页数
# print(page_obj.has_next()) ## 有没有下一页 返回值 是True 或者 Flase
# print(page_obj.has_previous()) ## 判断是否有上一页 是True 或者 Flase
# print(page_obj.has_other_pages()) ## 判断是否有其他页 是True 或者 Flase
# print(page_obj.next_page_number()) # 返回 下一页的页码 如果没有下一页 抛出异常
# print(page_obj.previous_page_number()) ## 返回上一页的页码
return HttpResponse("分页功能测试")
3.分页的基本实现
路由:
视图
模板
前端页面展示 页数
页数太多,效果不好
展示指定页数
指定展示5 页
视图
路由
模板
四、图片
在django开发中,除了静态文件,还有媒体文件(视频,声音,图片),将文件上传到服务器上面,首先需要一个文件处理模块(例如:PIL(python2版本) 和 pillow(python3版本) 一样,作用就是处理图片的,参与人工智能,数据分析),其次需要文件的存储位置。
1.安装 pillow
2.配置
3.修改类模型并数据迁移
生成迁移文件
数据迁移 同步表结构
migrate
4.使用图片
在站点管理中可以选择添加图片
五、富文本
Ckeditor 一种成熟的富文本编辑器,与django结合的比较好
1.安装
2.配置
settings.py
路由
3.使用
模型
导包
admin添加数据
前端展示
修改index页
模型中增加字段
数据迁移
ORM操作,添加推荐
修改视图
修改页面 index.html
{#继承父类模板#}
{% extends "base.html" %}
{% block content %}
<div class="jztop"></div>
<div class="container">
<div class="bloglist f_l">
{% for article in article %}
<h3><a href="/articledetails/{{ article.id }}">{{ article.title }}</a></h3>
<figure><img src="/static/{{ article.picture }}" alt="{{ article.title }}"></figure>
<ul>
<p> {{ article.description | safe }}</p>
<a title="{{ article.title }}" href="/articledetails/{{ article.id }}" target="_blank" class="readmore">阅读全文>></a>
</ul>
<p class="dateview"><span>{{ article.date }}</span><span>作者:{{ article.author }}</span><span>个人博客:[<a href="/jstt/bj/">{{ article.type.first }}</a>]</span>
</p>
{% endfor %}
</div>
<div class="r_box f_r">
<div class="tit01">
<h3 class="tit">关注我</h3>
<div class="gzwm">
<ul>
<li><a class="email" href="#" target="_blank">我的电话</a></li>
<li><a class="qq" href="#mailto:admin@admin.com" target="_blank">我的邮箱</a></li>
<li><a class="tel" href="#" target="_blank">我的QQ</a></li>
<li><a class="prize" href="#">个人奖项</a></li>
</ul>
</div>
</div>
<!--tit01 end-->
<div class="tuwen">
<h3 class="tit">图文推荐</h3>
<ul>
{% for tuwen in recommend_article %}
<li><a href="/articledetails/{{ tuwen.id }}"><img src="/static/{{ tuwen.picture }}"><b>{{ tuwen.title }}</b></a>
<p><span class="tulanmu"><a href="articledetails/{{ tuwen.id }}">{{ tuwen.type.first }}</a></span><span class="tutime">{{ tuwen.date }}</span></p>
</li>
{% endfor %}
</ul>
</div>
<div class="ph">
<h3 class="tit">点击排行</h3>
<ul class="rank">
{% for paihang in click_article %}
<li><a href="/articledetails/{{ paihang.id }}" title="{{ paihang.title }}" target="_blank">{{ paihang.title }}</a>
</li>
{% endfor %}
</ul>
</div>
<div class="ad"><img src="/static/images/03.jpg"></div>
</div>
</div>
<!-- container代码 结束 -->
<div class="jzend"></div>
{% endblock %}