Django框架(六)--路由别名,分页,图片,富文本,博客项目修改页面

一、路由的写法

使用别名

在这里插入图片描述

在这里插入图片描述

二、修改页面

博客项目连接

(一)修改个人日记页面

修改文章模型的性别属性

在这里插入图片描述

choices属性:由元组组成的一个可迭代对象,用来给字段提供可选值。

想查询值时,可以使用如下方法:
在这里插入图片描述

修改视图

在这里插入图片描述

修改模板

在这里插入图片描述

(二)增加文章详情页

路由

在这里插入图片描述

视图

在这里插入图片描述

修改模板newslistpic.html

在这里插入图片描述

新建articledetails.html模板

在这里插入图片描述

三、分页

(一)添加大量数据

路由

在这里插入图片描述

视图

在这里插入图片描述

分页:一个页面显示太多数据,效果不好需要分页处理

一般分为两种:

  • 前端分页
    • 后端将数据一次性全部提供给前端,前端通过js进行分页
    • 优点:简单直接
    • 缺点:传输数据需要时间,对数据库压力大
  • 后端分页
    • 在数据库查询时,指定查询范围,类似于sql中的limit,ORM中的切片。

django中提供了分页插件,paginator,专门负责提供分页功能,在django1.4版本之后才有。

(二)分页的常用方法

from django.core.paginator import Paginator

def pagetest(request):
    # 使用django自带分页Paginator的时候,源数据需要增加排序属性,否则会报异常
    article = Article.objects.all().order_by('-date')
    
    paginator = Paginator(article,5)    # 设置每页显示的数据条数,返回一个对象
    print(paginator.count)    # 返回内容总条数
    print(paginator.page_range)    # 可迭代页数范围
    print(paginator.num_pages)    # 返回最大页数
    page = paginator.page(5)
    print(page)    # <Page 5 of 21>,表示当前对象
    for one in page:
        print(one.content)

    print(page.number)    # 5,当前页
    print(page.has_next())    # 是否有下一页
    print(page.has_previous())    # 是否有上一页
    print(page.has_other_pages())    # 是否有其他页
    print(page.next_page_number())    # 下一页的页码,如果没有,抛异常
    print(page.previous_page_number())    # 上一页的页码,如果没有,抛异常

    return HttpResponse('分页功能测试')

(三)实现分页

视图

在这里插入图片描述

路由

第一个是防止由其他页面跳转时产生让出现错误
在这里插入图片描述

模板

在这里插入图片描述

结果

在这里插入图片描述

但是这样如果页数太多,效果不好。

(四)优化

每次显示五个页码,并添加上一页、下一页、首页、尾页

视图

在这里插入图片描述

模板

在这里插入图片描述

四、图片

在django开发中,除了静态文件,还有媒体文件(视频,声音,图片),将文件上传到服务器上面,首先需要一个文件处理模块(例如:PIL(python2模块)和pillow一样,作用就是处理图片的,参与人工智能,数据分析),其次需要文件的存储位置。

1.安装pillow

在这里插入图片描述

2.配置settings.py

在这里插入图片描述

3.修改模型

在这里插入图片描述

4.数据迁移

在这里插入图片描述

在这里插入图片描述

5.使用图片

在这里插入图片描述

五、富文本

Ckeditor,它是一种成熟的富文本编辑器,与django结合的较好。

1.安装ckeditor

在这里插入图片描述

2.配置settings.py

在这里插入图片描述

在这里插入图片描述

3.路由

在这里插入图片描述

使用

1.导包

在这里插入图片描述

2.修改字段类型

在这里插入图片描述

3.数据迁移
4.站点管理

在这里插入图片描述

5.前端显示

在这里插入图片描述

修改模板文件
在这里插入图片描述

在这里插入图片描述

六、修改index页面

1.模型中增加字段

在这里插入图片描述

2.数据迁移
3.ORM操作,更新文章的recommend字段

终端执行

python manage.py shell

然后运行如下代码

在这里插入图片描述

4.修改视图

在这里插入图片描述

5.修改模板
{#继承父类模板#}
{% extends "base.html" %}
{% block content %}
  <div class="jztop"></div>
  <div class="container">
    <div class="bloglist f_l">
     {% for one in article %}
      <h3><a href="/articledetails/{{ one.id }}">{{ one.title }}</a></h3>
      <figure><img src="/static/{{ one.picture }}" alt="{{ one.title }}"></figure>
      <ul>
        <p> {{ one.description |safe }}</p>
        <a title="{{ one.title }}" href="/articledetails/{{ one.id }}" target="_blank" class="readmore">阅读全文&gt;&gt;</a>
      </ul>
      <p class="dateview"><span>{{ one.date }}</span><span>作者:{{ one.author }}</span><span>个人博客:[<a href="/jstt/bj/">{{ one.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 one in recommend_article %}
          <li><a href="/articledetails/{{ one.id }}"><img src="/static/{{ one.picture }}"><b>{{ one.title }}</b></a>
            <p><span class="tulanmu"><a href="articledetails/{{ one.id }}">{{ one.type.first }}</a></span><span class="tutime">{{ one.date }}</span></p>
          </li>
          {% endfor %}
        </ul>
      </div>
      <div class="ph">
        <h3 class="tit">点击排行</h3>
        <ul class="rank">
          {% for one in click_article %}
          <li><a href="/articledetails/{{ one.id }}" title="{{ one.title }}" target="_blank">{{ one.title }}</a></li>
          {% endfor %}
        </ul>
      </div>
      <div class="ad"> <img src="/static/images/03.jpg"> </div>
    </div>
  </div>
  <!-- container代码 结束 -->
  <div class="jzend"></div>
{% endblock %}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值