Day18 - 建立追踪清单画面

今天将使用Django提供的Generic display views建立追踪清单画面。
Generic display views提供了以模型为基础的资料检视页面,可因应简单的资料检视需求。

建立追踪清单

View

  1. 开启应用程序目录下的views.py。

  2. import generic模组。

from django.views import generic
  1. 新增 BookListView()方法,并继承generic.ListView。
class BookListView(generic.ListView):
    model = Book
    template_name = 'book_list.html'
    
    def get_queryset(self):
      return Book.objects.filter(istrack=True)

Template

  1. 在应用程序目录的Template资料夹下新增book_list.html。
{% extends "base_generic.html" %}

{% block content %}
<h1>Book List</h1>
{% if book_list %}
<table>
  <tr>
    <td>书名</td>
    <td>作者</td>
    <td>连载状态</td>
    <td>最新章节数</td>
  </tr>
  {% for book in book_list %}
  <tr>
    <td>{{ book.title }}</td>
    <td>{{ book.authorid }}</td>
    <td>{% if book.bookstatus == 's' %}连载{% elif book.bookstatus == 'e' %}完结{% elif book.bookstatus == 'u' %}未知{% endif %}</td>
    <td>{{ book.totalsection}}</td>
  </tr>
  {% endfor %}
</table>
{% else %}
<p>There are no books in the library.</p>
{% endif %}
{% endblock %}
  • {% if book_list %}{% else %}{% endif %}:根据是否有查询结果,决定呈现内容。

  • {% for book in book_list %}{% endfor %}:使用for loop呈现所查询的资料。

  1. 修改base_generic.html,於sidebar新增连结:
	<ul class="sidebar-nav">
          <li><a href="{% url 'index' %}">Home</a></li>
          <li><a href="{% url 'newtrack' %}">New Track</a></li>
          <li><a href="{% url 'books' %}">All books</a></li>

        </ul>

URL

  1. 开启应用程序目录下的urls.py,新增以下内容:
urlpatterns += [
path('books/', views.BookListView.as_view(), name='books'),
]

验证结果

https://ithelp.ithome.com.tw/upload/images/20210930/201418865SzDzbLp5N.png

其他纪录

  1. 今日在爬虫套件中新增爬取连载状态的功能,在开发时发现该小说网站在「连载」和「完结」两种状态时,为了字体显示颜色,HTML格式会不同。
  • 连载:
<span style="color:#000;float:none" itemprop="updataStatus">连载</span>
  • 完结:
<span style="color:#000;float:none" itemprop="updataStatus">
	<font color="red">完结</font>
</span>

目前是先使用str.replace()的方法,将可能会额外多出的 和给取代掉,缺点是效能较差,且程序较不整洁。之後如果有时间会再来研究是否有更好的方法。

  1. 测试问题:这两天在测试时发现了一个问题:使用表单新增资料时,第一次新增时会成功,但第二次使用别的小说网址时会出现Duplicate key的错误讯息(已确认该网址的书名和网址在资料库中皆不重复),目前研判是TrackBook()里面的物件仍使用上一次表单送出的资料。
    此问题尚未解决,故先行纪录已待追踪。

<<:  Day 15:Git

>>:  【Day15】状态机的撰写

用 Python 畅玩 Line bot - 28:Line Notify(一)

Line bot 如果使用轻用量方案,每个月的免费主动推送次数只会有500则(一封讯息主动推送给 n...

Day 23: 不同的环境,不同的Driver,利用Driver 驾驭SQLDelight

Keyword:SQLDelight,Driver 到23日,引入SQLDelight,到在Andr...

day 14 - drone 的go-test & golangci-lint

自己的产出自己负责!每次交付专案之前我都会想到这句话, 是不是该再检查一下 程序码已经成功的buil...

【Day 2】什麽是分散式系统?RPC?

为了不让队友 panic,先发文,正在修改,有兴趣可以明日观看。 1.1 Introduction ...

[Day - 26] JavaScript 学习笔记 (六)

前言 这篇文章,前半部会介绍一些 Array 常用的基本方法,下面列的方法是目前本人在实际专案时,有...