Files
djangocms/core/sitemaps.py
2024-11-19 13:00:24 +07:00

61 lines
2.0 KiB
Python

from django.http import HttpResponse
from django.template import loader
from home.models import *
def generate_sitemap(request):
apps = [
'home',
'about',
'service',
'project',
'contact',
]
urls = []
for app_name in apps:
try:
urlconf = __import__(f'{app_name}.urls', fromlist=['urlpatterns'])
urlpatterns = getattr(urlconf, 'urlpatterns', [])
# Extract URL patterns from the resolver
for pattern in urlpatterns:
if hasattr(pattern, 'url_patterns'):
# If it's an included namespace, extract its URL patterns
urls.extend([f'/{url.pattern}' for url in pattern.url_patterns])
else:
# Otherwise, add the URL pattern itself
urls.append(f'/{pattern.pattern}')
except ImportError:
pass
# URLs for the Service model
service_slugs = serviceSection.objects.values_list('slug', flat=True)
if service_slugs:
for slug in service_slugs:
service_url = f'/service/details/{slug}/'
urls.append(service_url)
# URLs for the Project model
project_slugs = projectSection.objects.values_list('slug', flat=True)
if project_slugs:
for slug in project_slugs:
project_url = f'/project/details/{slug}/'
urls.append(project_url)
# Filter out the unwanted URLs with placeholders
urls = [url for url in urls if '<slug:slug>' not in url and '<int:id>' not in url and '<str:slug>' not in url and '<slug:category_slug>' not in url and '/contact/' not in url and '/subscribe/' not in url]
context = {
'urls': urls,
'request': request,
}
sitemap_xml = loader.render_to_string('sitemap/sitemap.xml', context)
sitemap_xml = sitemap_xml.replace('<priority>0.8</priority>', '<priority>1.0</priority>', 1)
return HttpResponse(sitemap_xml, content_type="application/xml")