Skip to content

Instantly share code, notes, and snippets.

@Owanesh
Created June 27, 2017 19:20
Show Gist options
  • Save Owanesh/3aea15ffb30f573042d612fd5ca7c036 to your computer and use it in GitHub Desktop.
Save Owanesh/3aea15ffb30f573042d612fd5ca7c036 to your computer and use it in GitHub Desktop.
Create dynamic sitemap with third-level link ⚡️ django.contrib.sitemaps
INSTALLED_APPS = [
'django.contrib.admin',
...
'django.contrib.sitemaps',
]
from django.contrib import sitemaps
from django.urls import reverse
from yourapp.models import MainClass, RelatedClass
class ManyToManyViewSitemap(sitemaps.Sitemap):
priority = 0.5
changefreq = 'monthly'
i18n = True
_allentry = MainClass.objects.language().all()
_midlevel = ''
def items(self):
items = []
for main_element in self._allentry:
items.append(main_element)
for related_element in main_element.related_field.all():
items.append(related_element)
return items
def location(self, item):
if isinstance(item,RelatedClass):
return reverse('your_third_level_url', kwargs={'main': self._midlevel, 'related': item.permalink})
else:
if self._midlevel != item.permalink:
self._midlevel=item.permalink
return reverse('your_second_level_url', kwargs={'main': item.permalink})
from django.contrib.sitemaps.views import sitemap
from .sitemap import *
sitemaps = {
...
'm2m': ManyToManyViewSitemap,
...
}
urlpatterns = [
...
url(_(r'^abc/(?P<main>[-\w]+)$'), yourview, name='your_second_level_url'),
url(_(r'^abc/(?P<main>[-\w]+)/(?P<related>[-\w]+)$'), yourview, name='your_third_level_url'),
url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps},
name='django.contrib.sitemaps.views.sitemap'),
...
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment