如何在Django项目中添加RSS提要和网站地图
这篇文章是Django中博客内容管理系统项目的延续。请看这里–用Django构建博客CMS(内容管理系统)。
RSS (Really Simple Syndication) Feed
RSS(Really Simple Syndication)是一种网络提要,允许用户和应用程序以标准化的、计算机可读的格式访问网站的更新。例如,这些馈送可以让用户在一个单一的新闻聚合器中跟踪许多不同的网站。Django自带了一个库来为我们的博客创建原子馈送。
为RSS提要创建视图 –
进入博客应用目录,创建一个文件feeds.py并粘贴以下代码。
from django.contrib.syndication.views import Feed
from django.template.defaultfilters import truncatewords
from .models import posts
from django.urls import reverse
from django.utils.feedgenerator import Atom1Feed
class blogFeed(Feed):
title = "geeksforgeeks"
link = "/posts/"
description = "RSS feed of GeeksForGeeks"
def items(self):
return posts.objects.filter(status = 1)
def item_title(self, item):
return item.title
def item_description(self, item):
return item.metades
def item_link(self, item):
return reverse('post_detail', args =[item.slug])
class atomFeed(Feed):
feed_type = Atom1Feed
为RSS提要创建路由 –
为了给RSS馈送提供路径,请进入你用来生成馈送的应用程序的urls.py文件并添加路径
# importing django routing libraries
from . import views
from django.urls import path, include
from .views import * from .feeds import blogFeed
urlpatterns = [
.....
# RSS route
path("posts / feed", blogFeed(), name ="feed"),
.....
]
Sample Feed
Sample Feed
Sitemap –
网站地图协议允许网站管理员将网站上可供抓取的URL告知搜索引擎。网站地图是一个XML文件,列出了一个网站的URL。它允许网站管理员包括关于每个URL的额外信息:最后一次更新的时间,以及它的变化频率。这使得搜索引擎能够更有效地抓取网站,并找到可能与网站其他内容隔离的URL。
将网站地图添加到INSTALLED_APPS中 –
Django也有一个网站地图创建器,进入博客应用目录,在设置文件中为已安装的应用添加网站地图。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
# adding in installed apps
'django.contrib.sitemaps',
]
创建网站地图 –
创建一个sitemaps.py文件并粘贴以下代码。
from django.contrib.sitemaps import Sitemap
from .models import posts
# sitemap class
class blogSitemap(Sitemap):
# change frequency and priority
changefreq = "daily"
priority = 1.0
def items(self):
return posts.objects.filter(status = 1)
def lastmod(self, obj):
return obj.updated_on
在模型中添加绝对的URL –
生成的网站地图应该有我们的帖子的尿液,所以我们需要在我们的模型中添加一个简单的函数,以便我们的网站地图库可以生成帖子的尿液
# add it in your model for which you want to generate sitemap
def get_absolute_url(self):
from django.urls import reverse
return reverse("post_detail", kwargs ={"slug": str(self.slug)})
网站地图的路由 –
现在,为了生成网站地图的URL,进入urls.py文件并添加路由
# adding sitemap libraries
from django.contrib.sitemaps.views import sitemap
from blog.sitemaps import blogSitemap
blogsitemap = {
"blog": blogSitemap, }
urlpatterns = [
.....
# urls handling site maps
path("sitemap.xml", sitemap, {"sitemaps": blogsitemap}, name ="sitemap"),
.....
]
现在你可以在指定的尿点看到RSS提要和网站地图了
Sample Sitemap
Sample Sitemap