📜  如何将 RSS Feed 和 Sitemap 添加到 Django 项目?

📅  最后修改于: 2022-05-13 01:55:19.545000             🧑  作者: Mango

如何将 RSS Feed 和 Sitemap 添加到 Django 项目?

这篇文章是 Django 博客 CMS 项目的延续。在这里查看 – 使用 Django 构建博客 CMS(内容管理系统)

RSS(真正简单的聚合)提要

RSS(Really Simple Syndication)是一种 Web 提要,它允许用户和应用程序以标准化的计算机可读格式访问网站更新。例如,这些提要可以允许用户在单个新闻聚合器中跟踪许多不同的网站。 Django 带有一个库来为我们的博客创建原子提要。

为 RSS 提要创建视图 –

转到博客应用程序目录并创建一个文件 feeds.py 并粘贴以下代码。

Python3
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


Python3
# 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"),
.....
]


Python3
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',
 
]


Python3
from django.contrib.sitemaps import Sitemap
from .models import posts
 
# siemap 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


Python3
# 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)})


Python3
# 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 提要创建路由 –

要路由 RSS 提要,请转到用于生成提要的应用程序的 urls.py 文件并添加路由

蟒蛇3

# 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"),
.....
]

样品饲料

样品饲料

网站地图 –

站点地图协议允许网站管理员将网站上可供抓取的 URL 告知搜索引擎。站点地图是一个 XML 文件,其中列出了站点的 URL。它允许网站管理员包含有关每个 URL 的附加信息:上次更新时间、更改频率。这允许搜索引擎更有效地抓取站点并查找可能与站点内容的其余部分隔离的 URL。

将站点地图添加到 INSTALLED_APPS –

Django 还带有一个站点地图创建者,转到博客应用程序目录并将站点地图添加到设置文件中的已安装应用程序

蟒蛇3

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 并粘贴以下代码。

蟒蛇3

from django.contrib.sitemaps import Sitemap
from .models import posts
 
# siemap 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 添加到模型 -

生成的站点地图应该有我们帖子的网址,所以我们需要向我们的模型添加一个简单的函数,以便我们的站点地图库可以生成帖子网址

蟒蛇3

# 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 文件并添加路由

蟒蛇3

# 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"),
.....
]

现在您可以在指定的 url 上看到 RSS 提要和站点地图

示例站点地图

示例站点地图