Diango博客--7.自動生成文章摘要

文章目錄

    • 0.思路引導
    • 1.方法一:覆寫 save 方法
    • 2.方法二:使用 truncatechars 模板過濾器

0.思路引導

博客文章的模型有一個 excerpt 字段,這個字段用于存儲文章的摘要。

若在 django admin 后臺手動為文章輸入摘要,每次手動輸入摘要比較麻煩。

若想要程序自動摘取正文的前 N 個字符作為摘要,以便提供文章預覽就可以了。

因此我們來實現如果文章沒有輸入摘要,則自動摘取正文的前 N 個字符作為摘要。
在這里插入圖片描述

1.方法一:覆寫 save 方法

第一種方法是通過覆寫模型的 save()方法,從正文body 中摘取前 N 個字符保存到摘要字段。

save()方法中執行的是保存模型實例數據到數據庫的邏輯,因此通過覆寫 save() 方法,在保存數據庫前做一些事情,比如填充某個缺失字段的值。

方案:先將 body 中的 Markdown 文本轉為 HTML 文本,去掉 HTML 文本里的 HTML 標簽,然后摘取文本的前 54 個字符作為摘要。去掉 HTML 標簽的目的是防止前 54 個字符中存在塊級 HTML 標簽而使得摘要格式比較難看。可以看到很多網站都采用這樣一種生成摘要的方式。

代碼位置:blog/models.py

import markdown
from django.utils.html import strip_tagsclass Post(models.Model):# 其它字段...body = models.TextField()excerpt = models.CharField(max_length=200, blank=True)# 其它方法...def save(self, *args, **kwargs):self.modified_time = timezone.now()# 首先實例化一個 Markdown 類,用于渲染 body 的文本。# 由于摘要并不需要生成文章目錄,所以去掉了目錄拓展。md = markdown.Markdown(extensions=['markdown.extensions.extra','markdown.extensions.codehilite',])# 先將 Markdown 文本渲染成 HTML 文本# strip_tags 去掉 HTML 文本的全部 HTML 標簽# 從文本摘取前 54 個字符賦給 excerptself.excerpt = strip_tags(md.convert(self.body))[:54]super().save(*args, **kwargs)

然后在模板中適當的地方使用模板標簽引用 {{ post.excerpt }} 顯示摘要的值即可
文件位置:templates/blog/index.html

<article class="post post-{{ post.pk }}">...<div class="entry-content clearfix"><p>{{ post.excerpt }}</p><div class="read-more cl-effect-14"><a href="{{ post.get_absolute_url }}" class="more-link">繼續閱讀 <span class="meta-nav"></span></a></div></div>
</article>

新添加一篇文章(這樣才能觸發 save 方法,此前添加的文章不會自動生成摘要,要手動保存一下觸發 save 方法),可以看到摘要效果如下:
在這里插入圖片描述

2.方法二:使用 truncatechars 模板過濾器

在 django 的模板系統中,我們之前使用過 safe 過濾器,使用語法為 {{ var | filter: arg }}。可以將模板過濾看做一個函數,它會作用于被它過濾的模板變量,從而改變模板變量的值。

第二種方法是使用 truncatechars 模板過濾器(Filter),其可以截取模板變量值的前 N 個字符顯示。

例如摘要效果,需要顯示 post.body 的前 54 的字符,那么可以在模板中使用 {{ post.body | truncatechars:54 }}。

文件位置:templates/blog/index.html

<article class="post post-{{ post.pk }}">...<div class="entry-content clearfix"><p>{{ post.body|truncatechars:54 }}</p><div class="read-more cl-effect-14"><a href="{{ post.get_absolute_url }}" class="more-link">繼續閱讀 <span class="meta-nav"></span></a></div></div>
</article>

不過這種方法的一個缺點就是如果前 54 個字符含有塊級 HTML 元素標簽的話(比如一段代碼塊),會使摘要比較難看。所以推薦使用第一種方法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452499.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452499.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452499.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android 增加觸摸范圍,android seekBar 增加點擊和滑動范圍

seekBar的的范圍有限&#xff0c;有時候設計師要求高度為4dp&#xff0c;此時范圍太小&#xff0c;很難滑動成功。因此&#xff0c;我們需要在不改變 UI 的前提下&#xff0c;增加點擊和滑動范圍。直接上代碼&#xff1a;public class MainActivity extends AppCompatActivity …

特斯拉股價暴跌,瘋狂燒錢是否真的能夠帶來高額回報?

“瘋狂燒錢”并不能成為公司持續虧損的理由&#xff0c;反而可能成為公司升級轉型的關鍵所在。 上周三&#xff0c;特斯拉發布第四季度財報&#xff0c;其后特斯拉CEO馬斯克在電話會議上表示&#xff0c;特斯拉虧損收窄&#xff0c;營收同比增長88%&#xff0c;但與此同時其首…

android gravity參數,Gravity - [ Android中文手冊 ] - 在線原生手冊 - php中文網

Gravity版本&#xff1a;Android 4.0 r1結構繼承關系public class Gravity extends Objectjava.lang.Objectandroid.view.Gravity類概述用來在一個更大容器中布置對象的標準常量和工具。常量public static final intAXIS_CLIP原始位控制右/底邊界是否被剪切到它的容器中&#x…

Diango博客--8.解鎖博客側欄

文章目錄0.思路引導1.[最新文章] 模板標簽2.[歸檔] 模板標簽3.[分類] 模板標簽4.[標簽云] 模板標簽5.使用自定義的模板標簽0.思路引導 博客側邊欄有四項內容&#xff1a;最新文章、歸檔、分類和標簽云&#xff0c;效果展示如下&#xff1a; 這些內容相對比較固定和獨立&…

十五、詳述 IntelliJ IDEA 插件的安裝及使用方法

正文 首先&#xff0c;進入插件安裝界面&#xff1a; Mac&#xff1a;IntelliJ IDEA -> Preferences -> Plugins;Windows&#xff1a;File -> Settings -> Plugins.標注 1&#xff1a;顯示 IntelliJ IDEA 的插件分類&#xff0c; All plugins&#xff1a;顯示 Inte…

編程巨星的唯一秘訣

別以為是那些軟件開發定律&#xff0c;別以為是開發出那些特殊用途的軟件&#xff0c;別以為是軟件設計技術本身。只有一條真理決定了一個軟件程序員的成功還是失敗。由于堅持這個真理&#xff0c;一個資深的程序員能在一天的時間里學會一門新的編程語言&#xff0c;而由于不堅…

面向數據流的設計方法

面向數據流的設計方法的目標是給出設計軟件結構的一個系統化的途徑。 在軟件工程的需求分析階段&#xff0c;信息流是一個關鍵考慮。通常用數據流圖描繪信息在系統中加工和流動的 情況。面向數據流的設計方法定義了一些不同的“映射”&#xff0c;利用這些映射可以把數據流圖…

AI研究的盲點:無解的神經網絡內在邏輯

論人工神經網絡內在邏輯的研究歷史及現狀。 伴隨著大數據&#xff0c;人工智能&#xff08;AI&#xff09;在沉寂了多年之后&#xff0c;又迎來了新的高潮。在這場涉及大部分科學的革命中&#xff0c;人工神經網絡釋放了人工智能&#xff08;AI&#xff09;。但科學家們發現&a…

Diango博客--9.歸檔、分類和標簽頁

文章目錄0.思路引導1.回顧2.歸檔頁面3.分類頁面4.標簽頁面0.思路引導 側邊欄已經正確地顯示了最新文章列表、歸檔、分類、標簽等信息&#xff0c;現在來完善歸檔、分類和標簽功能。 當用戶點擊歸檔下的某個日期、分類欄目下的某個分類或者標簽欄目下的某個標簽時&#xff0c;…

android studio1.2.6,1.2.2 使用Android Studio開發Android APP | 菜鳥教程

寫在前面本節將介紹如何使用Android Studio開發Android APP&#xff0c;和前面Eclipse ADT SDK搭建Android開發環境一樣&#xff0c;本節也只是介紹一些基本東西&#xff0c;深入的&#xff0c;比如快捷鍵&#xff0c;小技巧等會再另一篇文章中詳細地介紹&#xff01;1.下載A…

軟件工程中的啟發規則

1.改進軟件結構提高模塊獨立性 2. 模塊規模應該適中 3.深度、寬度、扇出和扇入都應適當 4.模塊的作用域應該在控制域之內 5.力爭降低模塊接口的復雜程度 6.設計單入口單出口的模塊 7.模塊功能應該可以預測

C#指南,重溫基礎,展望遠方!(4)表達式

表達式是在操作數和運算符的基礎之上構造而成。 表達式的運算符指明了向操作數應用的運算。 運算符的示例包括 、-、*、/ 和 new。 操作數的示例包括文本、字段、局部變量和表達式。 如果表達式包含多個運算符&#xff0c;那么運算符的優先級決定了各個運算符的計算順序。 例如…

UPS開始嘗試“貨車+無人機”的投遞方式,不必再擔心快遞員離職了

繼亞馬遜“空中倉庫”&#xff0c;無人機送貨再現新形式。 作為世界上最大的快遞承運商與包裹遞送公司&#xff0c;UPS當然也沒有放過“送貨無人機”這一新穎業務。與亞馬遜推出“空中倉庫”的理念類似&#xff0c;UPS并沒有選擇讓無人機從倉庫直接起飛&#xff0c;而是將之與…

技術人員如何"正確"的浪費時間?

蘋果產品用戶要浪費時間&#xff0c;你就應該這樣做&#xff1a;買個有鎖的 iPhone &#xff0c;每天刷幾百次威鋒網等待越獄或解鎖&#xff0c;看到新 App 就安裝&#xff0c;程序提示更新立刻升級&#xff1b;有新的固件(哪怕是 β 版)就壓制不住升級的欲望&#xff1b;每次 …

Diango博客--10.交流的橋梁“評論功能”

文章目錄0.思路引導1.創建"評論"應用2.設計"評論"的數據庫模型3.注冊"評論"模型到 admin4.設計“評論”表單5.展示評論表單6.“評論”視圖函數7.綁定 URL8.向讀者發送是否“評論”成功的狀態9.詳情頁底部顯示“評論”內容0.思路引導 本文將創建…

python與android交互,Android客戶端與Python服務器端的簡單通信

最近在做一個APP&#xff0c;需要與服務器通信&#xff0c;一點一點的嘗試&#xff0c;記錄一下。本文使用了OkHttp和Flask框架。Android客戶端&#xff1a;實現功能輸入完點擊OK按鈕后會toast成功的信息。Python服務端&#xff1a;各部分代碼如下&#xff1a;activity_main.xm…

結構程序設計

結構程序設計經典定義&#xff1a;如果一個程序的代碼塊僅僅通過順序、選擇和循環這3種基本控制結構進行連接&#xff0c;并且每個代碼塊只有一個入口和一個出口&#xff0c;則稱這個程序是結構化的。 結構程序設計更全面的定義&#xff1a;結構程序設計是盡可能少用GO TO語句…

Sql Server 開窗函數Over()的使用

利用over()&#xff0c;將統計信息計算出來&#xff0c;然后直接篩選結果集1 declare t table(2 ProductID int,3 ProductName varchar(20),4 ProductType varchar(20),5 Price int)6 7 insert t8 select 1,name1,P1,3 union all9 select 2,name2,P1,5 union all 10 select 3,…

云棲科技評論第48期:前沿科技對世界的改造 我們這代人只完成了1%

1、數字經濟版圖呈中美雙分趨勢 日本IT行業為前景擔憂 數字經濟版圖呈中美雙分趨勢 日本IT行業為前景擔憂 【新聞摘要】《日本經濟新聞》日前刊文稱&#xff0c;數字經濟的勢力版圖呈現中國和美國兩強雙分的趨勢明顯&#xff0c;這意味著日本可能不得不使用中美的技術&#xff…