Python学习23

django实例(环境、static、templates、路由、网页书籍类型选择、网页中间显示小说信息、ajax实现翻页)

学习目标:

python-django编写hj项目


学习内容:

1、设置环境和相关配置
2、在static中放入相关的文件
3、在templates中存放html文件
4、路由的配置
5、网页书籍类型选择
6、中间显示小说信息
7、在网页中利用ajax实现翻页刷新页面内容

1、设置环境和相关配置

1在django存放项目的目录下创建hj项目,在数据库中建好数据库,完成相关连接以及static和templates

  • 数据库

在这里插入图片描述

  • hj项目
    在这里插入图片描述

  • 告知应用、连接数据库、引入static和templates时,在hj/hj/setting中的配置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


2、在static中放入相关的文件

  • static文件夹除了在setting中配置,在html文件引用它的时候也需要声明
    在这里插入图片描述

在head标签下

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
{% load static %}
  • 在具体需要引用到static文件的时候引用格式如下:
...
<link rel="stylesheet" href="{% static 'hj/main.css'%}">
<script src="{% static 'hj/hm.js.下载'%}"></script><script type="text/javascript" src="{% static 'hj/jquery.min.js.下载'%}"></script>
<script type="text/javascript" src="{% static 'hj/common.js.下载'%}" charset="gbk"></script>
<script type="text/javascript" src="{% static 'hj/baidu.js.下载'%}" charset="gbk"></script>
...

3、在templates中存放html文件

在这里插入图片描述


4、路由的配置

  • 在项目urls下分发主路由
    在这里插入图片描述
  • 在应用下创建子路由文件urls
    在这里插入图片描述
from django.conf.urls import url
from django.urls import path, re_path
from .views import *

urlpatterns = [
    path('', hj_p1),
    url('class/(d+)/(d+)', books, name='books'),
    url('search', search, name='search'),
    url('chapter_info/(d+)', chapter_info, name='chapter_info'),
    url('show/(d+)/(d+)', show, name='show'),

]

5、网页书籍类型选择

1、实现书籍选择,点击黑色显示,如图:
在这里插入图片描述

2、在hj/views视图中添加hj_p1方法用来读取数据库中网页显示的书籍类型

def hj_p1(request):
    pagedata = Books.objects.all()
    type_list = Book_type.objects.all()
    tid=1
    return render(request, 'hj_p1.html', locals())

3、在网页hj_p1.html中接收views传来的数据,编写遍历数据并给出显示点击的方法

<nav class="nav" id="nav">
<div class="wrap clearfix">
<ul>
    <li id="0"><a href="#">首页</a></li>
    {% for type in type_list%}
        {% if type.id == tid %}
            <li id="1" class="active"><a href="/class/{{type.id}}/1">{{type.tname}}</a></li>
            {% else %}
                <li><a href="/class/{{type.id}}/1">{{type.tname}}</a></li>
        {% endif %}
    {% endfor %}
</ul>
</div>
</nav>

6、中间显示网页中间显示小说信息

1、网页中间存在的内容
在这里插入图片描述
2、标题栏

<table class="novel-table">
<thead>
<tr>
<th>类别</th>
<th>小说书名/最新章节</th>
<th>总字数</th>
<th>章节数</th>
<th>作者</th>
<th>更新时间</th>
<th>状态</th>
</tr>
</thead>

3、在标题栏下方展示内容

<tbody>
{% for book in pagedata %}
<tr>
<td><p class="p-class">{{ book.book_type.tname }}</p></td>
<td class="align-left"><p class="p-name"><a href="/chapter_info/{{ book.id }}" target="_blank" class="a-bk_name">{{ book.bname }}</a><a href="#" target="_blank"> {{ book.new_chapter }}</a> </p></td>
<td><p class="p-word">{{ book.wnum }}万字</p></td>
<td><p class="p-chapter">{{ book.chapter_num }}章</p></td>
<td><p class="p-author">{{ book.author }}</p></td>
<td><p class="p-time">{{ book.update_date|date:'Y年m月d日' }}</p></td><td><p class="p-status go-on">{{ book.status }}</p></td>
</tr>
{% endfor %}
</tbody>

7、在网页中利用ajax实现翻页刷新页面内容

1、当选择某一书籍类型页面展示出五个条目,然后可以实现翻页查看接下来的条目
在这里插入图片描述
在这里插入图片描述

2、在views视图中,编写翻页的方法

def books(request, tid, pid):
    tid = int(tid)
    pid = int(pid)
    book_type = Book_type.objects.get(id=tid)
    book_list = book_type.books_set.all()
    type_list = Book_type.objects.all()

    everyline = 5
    paginator = Paginator(book_list, everyline)
    pagecount = paginator.num_pages
    pagerange = paginator.page_range
    uppage = pid - 1
    if uppage < 1:
        uppage = 1
        pid = 1

    nextpage = pid + 1
    if nextpage > pagecount:
        nextpage = pagecount
        pid = pagecount

    pagedata = paginator.page(pid)
    if request.POST:
        book_lists = serializers.serialize('python', book_list, ensure_ascii=False)
        type_lists = serializers.serialize('python', type_list, ensure_ascii=False)
        pagedata = serializers.serialize('python', pagedata, ensure_ascii=False)
        dicts = {
            'pagedata': pagedata,
            'book_list': book_lists,
            'type_list': type_lists,
            'pagecount': pagecount,
            'uppage': uppage,
            'nextpage': nextpage,
            'pid': pid,
            'tid': tid,
            'book_type': book_type.tname
        }

        return JsonResponse(dicts)
    return render(request, 'hj_p1.html', locals())

3、在网页hj_p1.html中编写翻页模块,并且利用ajax方法实现页面的内容刷新
翻页模块:

 {% if search_status != 1 %}
<div class="page">
    <input type="hidden" id="hup" value="{{ uppage }}">
    <input type="hidden" id="hdown" value="{{ nextpage }}">
<a href="#"><span  id="first">首页</span></a>
    <a href="#"><span id="up">上一页</span></a>
<a href="#"><span id="down">下一页</span></a>
<a href="#" ><span id="last">尾页</span></a>
共<span id="tiao">({{ pid }}/<span id="pagecount">{{ pagecount }}</span>)</span>页 转到
# {{pagecount}}在含有id是pagecount的span标签中,是为了与后面ajax尾页翻页做联系

<input name="toPage" id="toPage" value="2" type="text">页
{% csrf_token %}
    <a><span id="tiaozhuan">跳转</span></a>
</div>
{% endif %}

4、ajax根据id判断执行翻页操作

<script src="{% static 'jquery.min.js.下载' %}"></script>
<script>


    $("span").click(function(){
       #点击时间的绑定
     var page = $('#toPage').val().toString();
      if ($(this).attr('id') == 'first'){
          var page = 1
  }
      if ($(this).attr('id') == 'last'){
          var page = $('#pagecount').text()
  }
      if ($(this).attr('id') == 'up'){
          var page = $('#hup').val()
  }
      if ($(this).attr('id') == 'down'){
          var page = $('#hdown').val()

  }	
	if(page.length != 0){

        $.ajax({
            type: 'post',
            url: page.toString(),
            data: {'ajax': '123'},
            headers: {"X-CSRFToken": '{{ csrf_token }}'},
            success: function (data) {
                var strs = '<thead> <tr id="head1"> <th>类别</th><th>小说书名/最新章节</th> <th>总字数</th> <th>章节数</th> <th>作者</th> <th>更新时间</th> <th>状态</th> </tr> </thead>';

                for (var book in data.pagedata) {
                    strs += '<tr><td><p class="p-class">' + data["book_type"] + '</p></td><td class="align-left"><p class="p-name"><a href="/chapter_info/' + data.pagedata[book]["fields"].id + '" target="_blank" class="a-bk_name">' + data.pagedata[book]["fields"].bname + '</a><a href="/show/' + data.pagedata[book].pk + '/' + data.pagedata[book]["fields"].chapter_num + '" target="_blank"> ' + data.pagedata[book]["fields"].new_chapter + '</a> </p></td> <td><p class="p-word">' + data.pagedata[book]["fields"].wnum + '万字</p></td> <td><p class="p-chapter">' + data.pagedata[book]["fields"].chapter_num + '章</p></td> <td><p class="p-author">' + data.pagedata[book]["fields"].author + '</p></td> <td><p class="p-time">' + data.pagedata[book]["fields"].update_date + '</p></td> <td><p class="p-status go-on">' + data.pagedata[book]["fields"].status + '</p></td></tr>'
                }

                $(".novel-table").html(strs);
                // 含有.novel-table的标签,替换为html(strs拼接的内容),此id在table标签里,ajax会根据strs替换掉table标签中的内容
                $("#tiao").html('('+data["pid"].toString() + '/' + '<span id="pagecount">'+data["pagecount"].toString()+'</span>)');
                //id是tiao的标签,替换成html里面的跳转链接
                $('#hup').val(data['uppage'])
                //点击上一页判断为up,锁定到id是hup,根据value值进行跳转
                $('#hdown').val(data['nextpage'])
                //点击下一页判断为down,锁定到id是hdown,根据value值进行跳转
            }
        })
}
 })

</script>

4、一般方法结合上面的页面显示内容的版块,即可实现页面的跳转

    {% if search_status != 1 %}
    <div class="page">
        <a href="/class/{{tid}}/1"><span>首页</span></a>
        <a href="/class/{{tid}}/{{uppage}}"><span>上一页</span></a>
        <a href="/class/{{tid}}/{{nextpage}}"><span>下一页</span></a>
        <a href="/class/{{tid}}/{{pagecount}}"><span>尾页</span></a>
        共<span id="tiao">({{ pid }}/<span id="pagecount">{{ pagecount }}</span>)</span>页 转到
    <input name="toPage" id="toPage" value="1" type="text" >页
{#{% csrf_token %}#}
    <a><span id="tiaozhuan">跳转</span></a>
</div>
{% endif %}
原文地址:https://www.cnblogs.com/tangmf/p/14331195.html