django网站地图sitemap



网站地图是根据网站的结构、框架、内容,生成的导航网页,是一个网站所有链接的容器。很多网站的连接层次比较深,蜘蛛很难抓取到,网站地图可以方便搜索引擎或者网络蜘蛛抓取网站页面,了解网站的架构,为网络蜘蛛指路,增加网站内容页面的收录概率。网站地图一般存放在域名根目录下并命名为sitemap,比如http://www.liujiangblog.com/sitemap.xml

一个典型的sitemap,其内容片段如下:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.liujiangblog.com/blog/9/</loc>
<lastmod>2017-12-08</lastmod>
<priority>0.4</priority>
</url>
<url>
<loc>http://www.liujiangblog.com/blog/8/</loc>
<lastmod>2017-12-05</lastmod>
<priority>0.4</priority>
</url>
<url>
<loc>http://www.liujiangblog.com/blog/7/</loc>
<lastmod>2017-11-19</lastmod>
<priority>0.4</priority>
</url>
# 更多内容未列出

Django自带了一个高级的生成网站地图的框架,我们可以很容易地创建出XML格式的网站地图。创建网站地图,只需编写一个Sitemap类,并在URLconf中编写对应的访问路由。

一、安装

安装sitemap框架的步骤如下:

  1. 在INSTALLED_APPS设置中添加‘django.contrib.sitemaps‘ .
  2. 确认settings.py中的TEMPLATES设置包含DjangoTemplates后端,并将APP_DIRS选项设置为True。其实,默认配置就是这样的,只有当你曾经修改过这些设置,才需要调整过来。
  3. 确认你已经安装sites框架. (注意: 网站地图APP并不需要在数据库中建立任何数据库表。修改INSTALLED_APPS的唯一原因是,以便Loader()模板加载器可以找到默认模板。)

二、初始化

为了在网站上激活站点地图生成功能,请把以下代码添加到URLconf中:

from django.contrib.sitemaps.views import sitemap

url(r‘^sitemap\.xml$‘, sitemap, {‘sitemaps‘: sitemaps},
    name=‘django.contrib.sitemaps.views.sitemap‘)

当用户访问/sitemap.xml时,Django将生成并返回一个网站地图。

网站地图的文件名并不重要,重要的是文件的位置。搜索引擎只会索引网站的当前URL层级及下属层级。例如,如果sitemap.xml位于根目录中,它会引用网站中的任何URL。 但是如果站点地图位于/content/sitemap.xml,则它只能引用以/content/开头的网址。

sitemap视图需要一个额外的必需参数: {‘sitemaps‘: sitemaps}sitemaps应是一个字典,将部门的标签(例如news或blog)映射到其 Sitemap类(例如,NewsSitemap或BlogSitemap)。也可以映射到Sitemap类的实例(例如,BlogSitemap(some_var))。

三、范例

假设你有一个博客系统,拥有Entry模型,并且你希望站点地图包含指向每篇博客文章的所有链接。 以下是Sitemap类的写法:

from django.contrib.sitemaps import Sitemap
from blog.models import Entry

class BlogSitemap(Sitemap):
    changefreq = "never"
    priority = 0.5

    def items(self):
        return Entry.objects.filter(is_draft=False)

    def lastmod(self, obj):
        return obj.pub_date

注意:

  • changefreq和priority分别对应于HTML页面中的<changefreq><priority>标签。
  • items()只是一个返回对象列表的方法。
  • lastmod方法应该返回一个datetime时间对象。
  • 在此示例中没有编写location方法,但你可以自己增加此方法来指定对象的URL。默认情况下,location()在每个对象上调用get_absolute_url()并将返回结果作为对象的url。也就是说,使用站点地图的模型,比如Entry,需要在模型内部实现get_absolute_url()方法。

四、Sitemap类详解

class Sitemap[source]

Sitemap类可以定义以下方法/属性:

1. items[source]

必须定义。返回对象列表的方法。

框架不关心对象的类型,重要的是这些对象将被传递给location(),lastmod(),changefreq()和priority()方法。

2. location[source]

可选。 其值可以是一个方法或属性。

如果是一个方法, 它应该为items()返回的对象的绝对路径.

如果它是一个属性,它的值应该是一个字符串,表示items()返回的每个对象的绝对路径。

上面所说的“绝对路径”表示不包含协议和域名的URL。 例子:

正确:‘/foo/bar/‘
错误:‘example.com/foo/bar/‘
错误:‘https://example.com/foo/bar/‘

如果未提供location,框架将调用items()返回的每个对象上的get_absolute_url()方法。

该属性最终反映到HTML页面上的<loc></loc>标签。

3. lastmod

可选。 一个方法或属性。表示当前条目最后的修改时间。

4. changefreq

可选。 一个方法或属性。表示当前条目修改的频率。

changefreq的允许值为:

‘always‘
‘hourly‘
‘daily‘
‘weekly‘
‘monthly‘
‘yearly‘
‘never‘

5. priority

可选。表示当前条目在网站中的权重系数,优先级。

示例值:0.4,1.0。 页面的默认优先级为0.5,最高为1.0。

6. protocol

可选的。定义网站地图中的网址的协议(‘http‘或‘https‘)。

7. limit

可选的。定义网站地图的每个网页上包含的最大超级链接数。

8. i18n

可选的。一个boolean属性,定义是否应使用所有语言生成此网站地图。默认值为False。

五、快捷方式

sitemap框架提供了一个快捷类,帮助我们迅速生成网站地图:

class GenericSitemap[source]

通过它,我们无需为sitemap编写单独的视图模块,直接在URLCONF中,获取对象,获取参数,传递参数,设置url,如下所示,一条龙服务:

from django.conf.urls import url
from django.contrib.sitemaps import GenericSitemap
from django.contrib.sitemaps.views import sitemap
from blog.models import Entry

info_dict = {
    ‘queryset‘: Entry.objects.all(),
    ‘date_field‘: ‘pub_date‘,
}

urlpatterns = [
    # some generic view using info_dict
    # ...

    # the sitemap
    url(r‘^sitemap\.xml$‘, sitemap,
        {‘sitemaps‘: {‘blog‘: GenericSitemap(info_dict, priority=0.6)}},
        name=‘django.contrib.sitemaps.views.sitemap‘),
]

六、静态视图的Sitemap

有时候,我们不希望在站点地图中出现一些静态页面,比如商品的详细信息页面。要怎么做呢?解决方案是在items中显式列出这些页面的网址名称,并在网站地图的location方法中调用reverse()。 像下面这样:

# sitemaps.py
from django.contrib import sitemaps
from django.urls import reverse

class StaticViewSitemap(sitemaps.Sitemap):
    priority = 0.5
    changefreq = ‘daily‘

    def items(self):
        return [‘main‘, ‘about‘, ‘license‘]

    def location(self, item):
        return reverse(item)

# urls.py
from django.conf.urls import url
from django.contrib.sitemaps.views import sitemap

from .sitemaps import StaticViewSitemap
from . import views

sitemaps = {
    ‘static‘: StaticViewSitemap,
}

urlpatterns = [
    url(r‘^$‘, views.main, name=‘main‘),
    url(r‘^about/$‘, views.about, name=‘about‘),
    url(r‘^license/$‘, views.license, name=‘license‘),
    # ...
    url(r‘^sitemap\.xml$‘, sitemap, {‘sitemaps‘: sitemaps},
        name=‘django.contrib.sitemaps.views.sitemap‘)
]

上面做法的本质,是我先找出不想展示的页面,然后反向选择一下,获取想生成站点条目的对象,最后展示到站点地图中。你可以简单的理解为‘反选’。

原文地址:https://www.cnblogs.com/navysummer/p/10200271.html

时间: 2024-10-11 00:46:25

django网站地图sitemap的相关文章

.net 生成网站地图 sitemap.xml

1.此处为Demo,借鉴别人的生成 xml //创建xml文件方法一 protected void btn1_OnClick(object sender, EventArgs e) { XmlText xmltext; XmlDocument xmldoc = new XmlDocument(); //加入XML的声明段落 XmlNode xmlnode = xmldoc.CreateXmlDeclaration("1.0", "gb2312", null); xm

网站地图sitemap

网站地图是根据网站的结构.框架.内容,生成的导航网页,是一个网站所有链接的容器.很多网站的连接层次比较深,蜘蛛很难抓取到,网站地图可以方便搜索引擎或者网络蜘蛛抓取网站页面,了解网站的架构,为网络蜘蛛指路,增加网站内容页面的收录概率.网站地图一般存放在域名根目录下并命名为sitemap,比如http://www.liujiangblog.com/sitemap.xml. 一个典型的sitemap,其内容片段如下: This XML file does not appear to have any

织梦dedecms中html和xml格式的网站地图sitemap制作方法

sitemap是网站上各网页的列表.创建并提交sitemap有助于百度(Google)发现并了解您网站上的所有网页,包括百度通过传统抓取方式可能找不到的网页.还可以使用sitemap提供有关你网站的其他信息,如上次更新日期.sitemap文件的更新频率等,供百度 (Google)spider参考. 百度(Google)对已提交的数据,不保证一定会抓取及索引所有网址.但是,百度(Google)会使用sitemap中的数据来了解网站的结构等信息,这样可以帮助百度改进抓取策略,并在日后能更好地对网站进

dedecms 织梦更改rss的路径、网站地图sitemap的路径

织梦网站地图的模板文件在哪 \templets\plus\sitemap.htm 织梦版本:V5.6V5.5及其它版本位置有所不同 修改后台管理文件夹中的dede/makehtml_map.php,在文件中搜索rss找到第17行和22行,删除/data17行 $murl = $cfg_cmspath."/sitemap.html";22行 $murl = $cfg_cmspath."/rssmap.html"; 修改include/arc.rssview.class

网站地图sitemap.xml的格式

URL列表—XML格式及规范说明: 标签名称  属性  标签说明  标签类型  标签限制  可选/必选  urlset  / urlset用来标记整个文档的开头  /  /  必选  url  / url标记每条信息的开始和结束  /  最多出现无限次   必选  loc  / 该条数据的存放地址  url  最小长度1个字符 最大长度256个字符 以"http://"开头   必选  lastmod  / 指该条数据的最新一次更新时间  日期  时间格式为yyyy-mm-dd   可

利用循环栏目导航标签及自定义页面制作帝国CMS网站地图

网站地图,又称站点地图,它就是一个页面,上面放置了网站上所有页面的链接.也简洁地表现了网站栏目关系,一般就包含顶级栏目和二级栏目.搜索引擎蜘蛛非常喜欢网站地图.在帝国CMS中没有生成网站地图的功能,所以嗨分享今天就给大家介绍一种方法生成它的网站地图. 主要用到帝国CMS中的两个重要知识点: 一.循环栏目导航标签(listshowclass) 二.自定义页面 第一步:增加标签模板 帝国CMS网站后台--[模板]-左侧[标签模板]-[管理标签模板] 可以增加一个标签模板,也可以直接使用 ID为1,模

如何制作网站地图(sitemap.html和sitemap.xml)?

总所周知,一个网站的网站地图非常重要,也是SEO站内优化的其中一个基本步骤,可总有人跟我咨询,到底如何制作网站地图,其实很简单,网站地图分为:sitemap.html(百度搜索引擎)和sitemap.xml(谷歌搜索引擎),还有一种是txt形式的,这里不做考究.下面我就给大家提供两种网站地图的制作方法,供大家参考. 1. 在线制作网站地图(WEB版本) 在线制作网站地图步骤非常简单,打开以下网址即可在线制作:https://www.xml-sitemaps.com/ 最后,点击:Start,即可

dede网站如何更新地图sitemap.html

网站建好后,从头部head的网站地图进入,发现还是之前的网站自带的旧模板而不是自己替换的内容,找了很多方法,甚至在dede后台生成管理里[一键更新网站] 结果小心脏受到了暴击,再从网站地图点进去样式全乱了,所以这个方法不可行. 注意到跟项目目录下的sitemap.html,是以html后缀结尾的,在dede里一般以html结尾的是静态文件,是有模板生成的,考虑到从网站地图点进去的内容还是旧的模板内容, 忽然灵光一闪,之所以是旧的内容,是不是网站地图这个页面需要单独更新? ------------

DEDE5.7如何制作网站地图?

DEDE用的人很多,可能大家在使用的过程中会碰到一些问 题,这很正常的,今天我们来讲讲DEDE5.7如何制作网站地图,其实网站地图分两种,一种做给网友看的,方便网友可以方便地找到自己想浏览的内容,另外 一种是做给搜索引擎蜘蛛看,方便蜘蛛在你网站上面抓取内容.    当然,我们这里讲的主要是针对蜘蛛的,因为DEDE默认的就有针对用户的网站地图,主要是以栏目的形式展现,这个可以在DEDE后台自行生成.其实大家印象当中的网站地图是XML格式的,一般命名成sitemap.xml,接下来进入正题.