聲明:本文參考追夢人物的blog,https://www.zmrenwu.com/courses/django-blog-tutorial/materials/24/ 大佬寫的django blog系列很不錯,有興趣的可以去學習學習
RSS簡介
RSS(Really Simple Syndication)是一種描述和同步網站內容的格式,它采用 XML 作為內容傳遞的格式。簡單來說就是網站可以把內容包裝成符合 RSS 標准的 XML 格式文檔。一旦網站內容符合一個統一的規范,那麼人們就可以開發一種讀取這種規范化的 XML 文檔的工具來聚合各大網站的內容。例如一個讀者可能關注了很多的博客網站,如果這些博客網站都支持 RSS 訂閱的話,他就只需要一個聚合閱讀器訂閱這些博客,就可以在聚合器工具裡看到全部博客的更新內容,而不必再分別訪問各個博客去看有沒有內容更新了。
使用 Django Feed 類
根據以上對 RSS 的介紹,我們可以發現關鍵的地方就是根據網站的內容生成規范化的 XML 文檔,幸運的是,Django 已經內置了一些生成這個文檔的方法,下面就使用這些方法來創建 RSS 訂閱文檔。
首先我們在 blog 應用的根目錄下(models.py 所在目錄)新建一個 feeds.py 文件以存放和 RSS 功能相關的代碼。讓後在 feeds.py 中寫入如下代碼:
# blog/feeds.py
from django.contrib.syndication.views import Feed
from .models import Post
class AllPostsRssFeed(Feed):
# 顯示在聚合閱讀器上的標題
title = "Django 博客教程演示項目"
# 通過聚合閱讀器跳轉到網站的地址
link = "/"
# 顯示在聚合閱讀器上的描述信息
description = "Django 博客教程演示項目測試文章"
# 需要顯示的內容條目
def items(self):
return Post.objects.all()
# 聚合器中顯示的內容條目的標題
def item_title(self, item):
return '[%s] %s' % (item.category, item.title)
# 聚合器中顯示的內容條目的描述
def item_description(self, item):
return item.body
代碼應該不難理解,主要就是指定要生成的 XML 文檔內容。各個屬性和方法的含義已在代碼中注釋,你只需把相關的內容替換成符合你博客的描述即可。
添加 URL
接下來就是指定 URL 模式,讓人們訪問這個 URL 後就可以看到 Feed 生成的內容。可以把 RSS 的 URL 配置寫在blog的 urls.py 文件裡,打開blog的urls.py 文件,在urlpatterns裡面添加rss的路徑,因為用了AllPostsRssFeed,所以需要import它,如下代碼:
# blog/url.py
from blog.feeds import AllPostsRssFeed
urlpatterns = [
# 記得在頂部引入 AllPostsRssFeed
url(r'^all/rss/$', AllPostsRssFeed(), name='rss'),
]
修改模板
簡單修改一下模板,把 RSS 的 URL 添加到模板中,即模板中RSS訂閱的代碼部分的url增加進來,增加{% url 'blog:rss' %},如下:
<a href="{% url 'blog:rss' %}" rel="external nofollow" target="_blank" title="訂閱本站"><i class="rss fa fa-rss"></i></a>
運行服務器,在網站點擊 RSS 訂閱的鏈接,就跳轉到 /all/rss/,你會看到一堆亂碼一樣的東西,這就是生成的 RSS 標准文檔,當然這個文檔不是給你讀的,而是給 RSS 聚合閱讀器工具讀的。
RSS 測試插件
可以測試一下訂閱效果,我使用的 Chrome 浏覽器,安裝了一個 RSS Feed Reader 的應用,如果你也使用的 Chrome 浏覽器,可以從應用商店添加它,然後就可以測試訂閱效果了。如果是其它浏覽器,自行查找相關 RSS 閱讀插件即可。我測試效果如下:可以看下我網站的RSS訂閱 https://0a0z.cn/all/rss/
可以看到訂閱成功了,訂閱界面顯示的信息就是我們在 AllPostsRssFeed 類中指定的相關信息。大功告成,現在任何人都可以訂閱我們的博客了!