iT邦幫忙

2021 iThome 鐵人賽

DAY 18
1
自我挑戰組

Python 30天自我挑戰系列 第 18

Day18 - 建立追蹤清單畫面

  • 分享至 

  • xImage
  •  

今天將使用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()裡面的物件仍使用上一次表單送出的資料。
    此問題尚未解決,故先行紀錄已待追蹤。

上一篇
Day17 - 安裝自己開發的套件
下一篇
Day19 - 使用Django進行自動化測試 (1)
系列文
Python 30天自我挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言