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

一、路由的写法

使用别名

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

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

二、修改页面

博客项目连接

(一)修改个人日记页面

修改文章模型的性别属性

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

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

想查询值时,可以使用如下方法:
Django框架(六)--路由别名,分页,图片,富文本,博客项目修改页面_第4张图片

修改视图

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

修改模板

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

(二)增加文章详情页

路由

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

视图

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

修改模板newslistpic.html

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

新建articledetails.html模板

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

三、分页

(一)添加大量数据

路由

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

视图

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

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

一般分为两种:

  • 前端分页
    • 后端将数据一次性全部提供给前端,前端通过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)    # ,表示当前对象
    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框架(六)--路由别名,分页,图片,富文本,博客项目修改页面_第13张图片

路由

第一个是防止由其他页面跳转时产生让出现错误
Django框架(六)--路由别名,分页,图片,富文本,博客项目修改页面_第14张图片

模板

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

结果

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

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

(四)优化

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

视图

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

模板

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

四、图片

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

1.安装pillow

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

2.配置settings.py

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

3.修改模型

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

4.数据迁移

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

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

5.使用图片

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

五、富文本

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

1.安装ckeditor

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

2.配置settings.py

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

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

3.路由

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

使用

1.导包

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

2.修改字段类型

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

3.数据迁移

4.站点管理

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

5.前端显示

修改模板文件
Django框架(六)--路由别名,分页,图片,富文本,博客项目修改页面_第32张图片

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

六、修改index页面

1.模型中增加字段

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

2.数据迁移

3.ORM操作,更新文章的recommend字段

终端执行

python manage.py shell

然后运行如下代码

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

4.修改视图

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

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">阅读全文>>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:[email protected]" target="_blank">我的邮箱a>li>
            <li><a class="tel" href="#" target="_blank">我的QQa>li>
            <li><a class="prize" href="#">个人奖项a>li>
          ul>
        div>
      div>
      

      <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>
  
  <div class="jzend">div>
{% endblock %}

你可能感兴趣的:(Django框架)