您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

sitemaps.py 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. # -*- coding: utf-8 -*-
  2. from django.conf import settings
  3. from django.contrib.sitemaps import Sitemap
  4. from django.urls import reverse
  5. from django.utils.translation import get_language, activate
  6. from oscar.core.loading import get_model
  7. Product = get_model('catalogue', 'Product')
  8. Category = get_model('catalogue', 'Category')
  9. """
  10. A basic example what a sitemap could look like for a multi-language Oscar
  11. instance.
  12. Creates entries for the homepage, for each product and each category.
  13. Repeats those for each enabled language.
  14. """
  15. class I18nSitemap(Sitemap):
  16. """
  17. A language-specific Sitemap class. Returns URLS for items for passed
  18. language.
  19. """
  20. def __init__(self, language):
  21. self.language = language
  22. self.original_language = get_language()
  23. def get_obj_location(self, obj):
  24. return obj.get_absolute_url()
  25. def location(self, obj):
  26. activate(self.language)
  27. location = self.get_obj_location(obj)
  28. activate(self.original_language)
  29. return location
  30. class StaticSitemap(I18nSitemap):
  31. def items(self):
  32. return ['home', ]
  33. def get_obj_location(self, obj):
  34. return reverse(obj)
  35. class ProductSitemap(I18nSitemap):
  36. def items(self):
  37. return Product.objects.browsable()
  38. class CategorySitemap(I18nSitemap):
  39. def items(self):
  40. return Category.objects.all()
  41. language_neutral_sitemaps = {
  42. 'static': StaticSitemap,
  43. 'products': ProductSitemap,
  44. 'categories': CategorySitemap,
  45. }
  46. # Construct the sitemaps for every language
  47. base_sitemaps = {}
  48. for language, __ in settings.LANGUAGES:
  49. for name, sitemap_class in language_neutral_sitemaps.items():
  50. base_sitemaps['{0}-{1}'.format(name, language)] = sitemap_class(language)