Django站点地图 - 将loc添加到站点地图中

时间:2013-07-12 12:44:44

标签: django

有没有办法将自定义位置添加到站点地图中?我想将我的主页添加到站点地图中,但我不使用flatpages

我应该开始使用flatpages并手动将主页添加到数据库中吗?你推荐哪种方法?我使用django.contrib.sitemaps生成站点地图。

1 个答案:

答案 0 :(得分:2)

您可以为特定视图定义站点地图,否则不会包含在站点的站点地图中,如下面我为自己的Django应用程序开发的那样:

from django.core.urlresolvers import reverse
from django.contrib.sitemaps import Sitemap

class StaticSitemap(Sitemap):
    """Reverse static views for XML sitemap."""

    def __init__(self, items_in=[]):
        self.items_list = items_in

    def items(self):
        # Return list of url names for views to include in sitemap
        return self.items_list

    def location(self, item):
        # if kwargs not in item set as None
        kwargs = item['kwargs'] if 'kwargs' in item else None
        return reverse(item['view_name'], kwargs=kwargs)

基本上,这会将视图名称(在urls.py中指定)反转为将在站点地图中显示的实际网址。

<强>用法

sitemap.xml中指定您的urls.py网址,以便获取sitemaps参数,如以下urls.py摘录中所示:

...
(
    r'^sitemap\.xml$',
    'django.contrib.sitemaps.views.sitemap',
    {'sitemaps': sitemaps}
),
...

sitemaps dict应该只包含一个条目,例如:

sitemaps = {
    'views': StaticSitemap(STATIC_VIEWS),
    ...
}

其中STATIC_VIEWS以这种方式构建:

STATIC_URLS = [
    'home_page', 'about_page', 'disclaimer_page', # any other view name
]
STATIC_VIEWS = []
for url in STATIC_URLS:
    STATIC_VIEWS.append({'view_name':url})