我想实现 django 站点地图,但我对将 sitemaps.py 文件放在哪里以及我应该修改哪个 urls.py 文件以包括:
url(r'^sitemap.xml$', 'django.contrib.sitemaps.views.index', {'sitemaps': sitemaps}),
我应该把上面的行放在 project(mysite) urls.py 文件还是 app(sampleapp1) urls.py 文件中?
我想实现 django 站点地图,但我对将 sitemaps.py 文件放在哪里以及我应该修改哪个 urls.py 文件以包括:
url(r'^sitemap.xml$', 'django.contrib.sitemaps.views.index', {'sitemaps': sitemaps}),
我应该把上面的行放在 project(mysite) urls.py 文件还是 app(sampleapp1) urls.py 文件中?
您在项目的应用程序中创建站点地图(您需要站点地图的那些),文档没有说明什么和在哪里,因为您可以随心所欲地做,您只需将它们注册在通过 url 传递的字典中. 例如,您有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,
}
文档确实强调了这一点,但这里是总结版本:
确保您有正确的设置。这归结为两件事:
django.contrib.sitemaps
在INSTALLED_APPS
接下来,您必须决定将sitemap.xml
. 这很重要,因为它的位置将控制站点地图中包含的内容。如果您将其指向/foo/sitemap.xml
仅以开头的那些 urlfoo/
将包含在站点地图中。因此,最好将其放在根 url conf中,这通常位于您的项目级别。您所要做的就是将问题中的行添加到适当的urls.py
.
现在您必须实际生成站点地图。Django 提供了两种自动生成它的方法。GenericSiteMap
为您的模型和FlatPageSitemap
其他一切。您当然可以创建自己的自定义站点地图。
django.contrib.sitemaps.SiteMap
items
。这就是站点地图中的链接。对于您的对象,您可以只返回一个查询集。如果要创建自定义链接,则返回url 名称列表,django 会自动调用reverse()
计算 URL。urls.py
。因此,如果您拥有ProductMap
所有产品,那么您将{'sitemaps': {'products': ProductMap}}
作为最后一个参数传递(在确保导入它之后)。这里的所有都是它的。