我想实现django站点地图,但我对于将sitemaps.py文件放在哪里以及应该修改哪个urls.py文件包含以下内容感到困惑:
url(r'^sitemap.xml$', 'django.contrib.sitemaps.views.index', {'sitemaps': sitemaps}),
我可以将上面的行放在project(mysite)urls.py文件或app(sampleapp1)urls.py文件中吗?
答案 0 :(得分:7)
您在项目的应用程序中创建站点地图(您需要站点地图的应用程序),文档没有说明您可以随意做什么和在哪里,您只需要在字典中注册它们在网址中传递。
例如,您有your_project
个blog
应用:
your_project
- blog
- models.py
- views.py
- ...
- sitemap.py
在您的sitemap.py中:
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
然后在你的urls.py(项目的主要urls.py)中:
...
from blog.sitemap import BlogSitemap
sitemaps = {
'blog':BlogSitemap
}
url(r'^sitemap\.xml$', 'django.contrib.sitemaps.views.index', {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
您对所需的每个站点地图重复相同的操作,如果您的项目很大(许多应用程序),那么每个应用程序使用不同的站点地图是明智的,然后在您的urls.py中:
...
from blog.sitemap import BlogSitemap
from fooapp.sitemap import FooSitemap
from barapp.sitemap import BarSitemap
sitemaps = {
'blog':BlogSitemap,
'foo':FooSitemap,
'bar':BarSitemap,
}
答案 1 :(得分:3)
documentation确实突出了这一点,但这里是摘要版本:
确保您拥有correct settings。这归结为两件事:
django.contrib.sitemaps
INSTALLED_APPS
接下来,您必须决定将sitemap.xml
放在哪里。这很重要,因为它的位置将控制站点地图中包含的内容。如果您将其指向/foo/sitemap.xml
,则只有那些以foo/
开头的网址才会包含在网站地图中。因此,最好将它放在 root url conf 中,这通常是在您的项目级别。您所要做的就是将问题中的行添加到相应的urls.py
。
现在您必须实际生成站点地图。 Django提供了两种自动生成方式。您的模型GenericSiteMap
,其他所有内容FlatPageSitemap
。您当然可以创建自己的自定义站点地图。
django.contrib.sitemaps.SiteMap
items
。这是站点地图中的链接。对于您的对象,您只需返回一个查询集。如果您要创建自定义链接,请返回网址名称列表,django会自动调用reverse()
来计算网址。urls.py
中的字典。因此,如果您的所有产品都有ProductMap
,那么您可以将{'sitemaps': {'products': ProductMap}}
作为最后一个参数传递(确保导入后)。这就是它的全部内容。