Django站点地图框架中的静态页面

时间:2010-06-24 12:11:43

标签: django indexing sitemap

我对sitemap.xml生成和Django的站点地图框架有一些疑问。

假设我有一个博客应用程序,其中包含每个帖子内容的post_detail页面和一堆“帮助”页面,如“按标签查看”,“按作者查看”等。

  1. 是否必须在sitemap.xml中包含每个页面,包括“帮助”页面?我希望所有“帮助”页面都被编入索引,因为有许多关键字和文本。我知道站点地图旨在帮助索引页面,为网络爬虫提供一些指示,但不限制抓取。最佳做法是什么?包括所有内容或仅包含重要页面?
  2. 如果可以将所有页面都放在sitemap.xml中,那么在db页面中提交普通的,未存储的页面到sitemaps框架的最佳方法是什么?一种可能的方法是使用一个sitemap类,它通过url名称返回反向URL。但它似乎根本不是DRY,因为我将需要第二次注册这些url-names(在url()函数和Sitemap类中)。
  3. 我可能有一个自定义的django.conf.urls.defaults.url函数来注册站点地图的url-mapping ...你怎么看?

    谢谢。

1 个答案:

答案 0 :(得分:3)

如何使用站点地图由搜索引擎决定。有些只会对站点地图中的内容编制索引,而其他人则会将其作为起点,并根据交叉链接抓取整个站点。

至于包含非生成页面,我们刚刚创建了django.contrib.sitemaps.Sitemap的子类,并让它读取一个纯文本文件,每行一个URL。类似的东西:

class StaticSitemap(Sitemap):
    priority = 0.8
    lastmod = datetime.datetime.now()

    def __init__(self, filename):
        self._urls = []
        try:
            f = open(filename, 'rb')
        except:
            return

        tmp = []
        for x in f:
            x = re.sub(r"\s*#.*$", '', x) # strip comments
            if re.match('^\s*$', x):
                continue # ignore blank lines
            x = string.strip(x) # clean leading/trailing whitespace
            x = re.sub(' ', '%20', x) # convert spaces
            if not x.startswith('/'):
                x = '/' + x
            tmp.append(x)
        f.close()
        self._urls = tmp
    # __init__

    def items(self):
        return self._urls

    def location(self, obj):
        return obj

您可以在主站点地图例程中使用类似的内容调用它:

sitemap['static'] = StaticSitemap(settings.DIR_ROOT +'/sitemap.txt')

我们的sitemap.txt文件如下所示:

# One URL per line.
# All paths start from root - i.e., with a leading /
# Blank lines are OK.

/tour/
/podcast_archive/
/related_sites/
/survey/
/youtube_videos/

/teachers/
/workshops/
/workshop_listing_info/

/aboutus/
/history/
/investment/
/business/
/contact/
/privacy_policy/
/graphic_specs/
/help_desk/