很多人都知道django提供了sitemaps的功能,就是在一個sitemap.xml中顯示網站一些相關的項目:
一般是按照下面的方法在urls.py中加入:
from django.contrib.sitemaps import FlatPageSitemap, GenericSitemap
from ddtcms.blog.sitemaps import BlogSitemap
from ddtcms.blog.models import Entry
info_dict = {
'queryset': Entry.objects.all(),
'date_field': 'pub_date',
}
sitemaps = {
'flatpages': FlatPageSitemap,
'blog': BlogSitemap,
}
再在urlpatterns中加入:
(r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),
#(r'^sitemap.xml$', 'django.contrib.sitemaps.views.index', {'sitemaps': sitemaps}),
(r'^sitemap-(?P<section>.+).xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),
然後在瀏覽器中訪問 http://127.0.0.1:8000/sitemap.xml 即可.
我按照上面的做法做了,但是會出現下面的錯誤:
AttributeError at /sitemap.xml
'Site' object has no attribute 'flatpage_set'
| Request Method: |
GET |
| Request URL: |
http://localhost/sitemap.xml |
| Exception Type: |
AttributeError |
| Exception Value: |
'Site' object has no attribute 'flatpage_set' |
| Exception Location: |
C:/python25/Lib/site-packages/django/contrib/sitemaps/__init__.py in items, line 81 |
說的就是'Site' object has no attribute 'flatpage_set',看了django的原始碼,也不知道是怎麼回事.
後來看了google上的一些django apps,我終於把上面這個錯誤解決了.
方法是:
在settings.py中增加
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.sites',
'django.contrib.contenttypes',
'django.contrib.sessions',
......
'django.contrib.flatpages', <<<<增加這個
MIDDLEWARE_CLASSES = (
....
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', <<<增加這個
再訪問 http://127.0.0.1:8000/sitemap.xml 試試?就出來了在blog模組中定義的sitemap的條目了.
很簡單是不是?