Показ дописів із міткою sitemap. Показати всі дописи
Показ дописів із міткою sitemap. Показати всі дописи

Зміна xml шаблону Sitemap в Django

Захотілось додати CSS в XML-файл Sitemap'у по типу WordPress'івського. Йдемо в /usr/lib/python2.7/site-packages/django/contrib/sitemaps/templates/ (в Fedora такий шлях) і копіюємо sitemap.xml в свій template каталог проекту. Робимо потрібні зміни в ньому і маємо щастя.

Django Sitemap клас для Articles

### sitemap.py

from articles.models import Article

class ArticlesListSitemap(Sitemap):
changefreq = "weekly"
priority = 0.9
def lastmod(self, obj):
return obj.publish_date
def location(self, obj):
d = obj.publish_date.strftime("%Y")
return '/articles/' + d + '/' + obj.slug + '/'
def items(self):
return Article.objects.filter(is_active=True)

Django Sitemap з пустим items

Теж погано документована фіча.
Треба додати елемент в sitemap, але без прив'язки до моделі. В даному випадку це розділ "Контакти" з моделлю, але мені не потрібна індексація схованих даних.

Рішення

sitemap.py
from django.contrib.sitemaps import Sitemap

class ContactsSitemap(Sitemap):
changefreq = "weekly"
priority = 0.5
def lastmod(self, obj):
return datetime.datetime.now()
def location(self, obj):
return '/contact/'
def items(self):
return [self]


urls.py

sitemaps = {
#'flatpages': MyFlatPageSitemap,
'contact': ContactsSitemap,
}

Django FlatPageSitemap priority і changefreq

по замовчуванні FlatPageSitemap генерить лише loc, а priority і changefreq треба прописувати самому. Причому, в документації про це нічого немає, або я сліпий. Гугл теж дуже скупо описує. Танці з бубном 10 хв. і рішення знайдено.

sitemap.py

from django.contrib.sitemaps import FlatPageSitemap

class MyFlatPageSitemap(FlatPageSitemap):
def priority(self, item):
if 'about' in str(item.get_absolute_url).lower():
return 0.8
if 'clients' in str(item.get_absolute_url).lower():
return 0.3
if 'services' in str(item.get_absolute_url).lower():
return 0.8
else:
return 0.2
def changefreq(self, obj):
return "weekly"

urls.py

from django.contrib.sitemaps import FlatPageSitemap, GenericSitemap
from sitemap import *

sitemaps = {
#'flatpages': FlatPageSitemap,
'flatpages': MyFlatPageSitemap,
}

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