1
0
mirror of https://github.com/django/django.git synced 2025-10-31 09:41:08 +00:00

Fixed #33662 -- Allowed Sitemap to customize languages for each item.

This commit is contained in:
Roxane
2022-10-21 17:36:44 +02:00
committed by Mariusz Felisiak
parent ab7a85ac29
commit 289e9a75af
5 changed files with 122 additions and 5 deletions

View File

@@ -92,6 +92,10 @@ class Sitemap:
return attr(item)
return attr
def get_languages_for_item(self, item):
"""Languages for which this item is displayed."""
return self._languages()
def _languages(self):
if self.languages is not None:
return self.languages
@@ -103,8 +107,8 @@ class Sitemap:
# This is necessary to paginate with all languages already considered.
items = [
(item, lang_code)
for lang_code in self._languages()
for item in self.items()
for lang_code in self.get_languages_for_item(item)
]
return items
return self.items()
@@ -201,7 +205,8 @@ class Sitemap:
}
if self.i18n and self.alternates:
for lang_code in self._languages():
item_languages = self.get_languages_for_item(item[0])
for lang_code in item_languages:
loc = f"{protocol}://{domain}{self._location(item, lang_code)}"
url_info["alternates"].append(
{
@@ -209,7 +214,7 @@ class Sitemap:
"lang_code": lang_code,
}
)
if self.x_default:
if self.x_default and settings.LANGUAGE_CODE in item_languages:
lang_code = settings.LANGUAGE_CODE
loc = f"{protocol}://{domain}{self._location(item, lang_code)}"
loc = loc.replace(f"/{lang_code}/", "/", 1)