Features: 1) Enhance queryset filtering in get_queryset to include additional active checks for brand, category, stocks, and vendor; 2) Add caching and header variation for sitemap_index and sitemap_detail views; 3) Update sitemap limit settings for Category and Brand sitemaps to adjust capacity;

Fixes: 1) Replace usage of `slugify` with direct access to `obj.slug` in sitemap location methods;

Extra: 1) Remove unused `slugify` import from `core/sitemaps.py`.
This commit is contained in:
Egor Pavlovich Gorbunov 2025-07-09 02:30:26 +03:00
parent 89301d6432
commit b6983b63a3
3 changed files with 18 additions and 10 deletions

View file

@ -1,5 +1,4 @@
from django.contrib.sitemaps import Sitemap
from django.utils.text import slugify
from core.models import Brand, Category, Product
from evibes.settings import LANGUAGE_CODE
@ -9,7 +8,7 @@ class ProductSitemap(Sitemap):
protocol = "https"
changefreq = "daily"
priority = 0.9
limit = 40000
limit = 25000
def items(self):
return (
@ -33,7 +32,7 @@ class CategorySitemap(Sitemap):
protocol = "https"
changefreq = "weekly"
priority = 0.7
limit = 40000
limit = 10000
def items(self):
return Category.objects.filter(is_active=True).only("uuid", "name", "modified").order_by("-modified")
@ -42,15 +41,14 @@ class CategorySitemap(Sitemap):
return obj.modified
def location(self, obj):
slug = slugify(obj.name)
return f"/{LANGUAGE_CODE}/catalog/{obj.uuid}/{slug}"
return f"/{LANGUAGE_CODE}/catalog/{obj.slug}"
class BrandSitemap(Sitemap):
protocol = "https"
changefreq = "weekly"
priority = 0.6
limit = 40000
limit = 10000
def items(self):
return Brand.objects.filter(is_active=True).only("uuid", "name", "modified").order_by("-modified")
@ -59,5 +57,4 @@ class BrandSitemap(Sitemap):
return obj.modified
def location(self, obj):
slug = slugify(obj.name)
return f"/{LANGUAGE_CODE}/brand/{obj.uuid}/{slug}"
return f"/{LANGUAGE_CODE}/brand/{obj.slug}"

View file

@ -11,6 +11,8 @@ from django.shortcuts import redirect
from django.utils.encoding import force_str
from django.utils.http import urlsafe_base64_decode
from django.utils.translation import gettext_lazy as _
from django.views.decorators.cache import cache_page
from django.views.decorators.vary import vary_on_headers
from django_ratelimit.decorators import ratelimit
from djangorestframework_camel_case.render import CamelCaseJSONRenderer
from djangorestframework_camel_case.util import camelize
@ -52,6 +54,8 @@ from evibes.settings import LANGUAGES
from payments.serializers import TransactionProcessSerializer
@cache_page(60 * 60 * 12)
@vary_on_headers("Host")
def sitemap_index(request, *args, **kwargs):
"""
Handles the request for the sitemap index and returns an XML response. It ensures the response includes
@ -70,7 +74,8 @@ def sitemap_index(request, *args, **kwargs):
response["Content-Type"] = "application/xml; charset=utf-8"
return response
@cache_page(60 * 60 * 24)
@vary_on_headers("Host")
def sitemap_detail(request, *args, **kwargs):
"""
Handles the detailed view response for a sitemap. This function processes

View file

@ -362,7 +362,13 @@ class ProductViewSet(EvibesViewSet):
qs = super().get_queryset()
if self.request.user.has_perm("core.view_product"):
return qs
return qs.filter(is_active=True)
return qs.filter(
is_active=True,
brand__is_active=True,
category__is_active=True,
stocks__isnull=False,
stocks__vendor__is_active=True,
)
def get_object(self):
queryset = self.filter_queryset(self.get_queryset())