Created
June 27, 2017 19:20
-
-
Save Owanesh/3aea15ffb30f573042d612fd5ca7c036 to your computer and use it in GitHub Desktop.
Create dynamic sitemap with third-level link ⚡️ django.contrib.sitemaps
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
INSTALLED_APPS = [ | |
'django.contrib.admin', | |
... | |
'django.contrib.sitemaps', | |
] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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}) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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