72 lines
2.5 KiB
Python
72 lines
2.5 KiB
Python
"""
|
|
Context processors for SEO and site-wide data.
|
|
"""
|
|
from django.conf import settings
|
|
from reports.models import SiteSettings
|
|
|
|
|
|
def seo_context(request):
|
|
"""
|
|
Provides SEO-related context variables for all templates.
|
|
"""
|
|
site_url = request.build_absolute_uri('/').rstrip('/')
|
|
|
|
# Get site settings
|
|
site_settings = SiteSettings.get_settings()
|
|
|
|
# Default SEO values
|
|
default_seo = {
|
|
'site_name': 'Портал за Докладване на Измами',
|
|
'site_description': 'Портал за докладване на измами. Защита на гражданите от онлайн измами.',
|
|
'site_keywords': 'измами, киберпрестъпления, докладване измами, защита потребители, България, официален портал, анти-измами, сигурност онлайн',
|
|
'site_author': 'Официален Портал - Република България',
|
|
'site_language': 'bg',
|
|
'site_url': site_url,
|
|
'site_image': f'{site_url}/static/images/logo.svg',
|
|
'twitter_site': '@fraudplatformbg',
|
|
'twitter_creator': '@fraudplatformbg',
|
|
}
|
|
|
|
# Get page-specific SEO from view context if available
|
|
page_seo = {
|
|
'page_title': getattr(request, 'seo_title', None),
|
|
'page_description': getattr(request, 'seo_description', None),
|
|
'page_keywords': getattr(request, 'seo_keywords', None),
|
|
'page_image': getattr(request, 'seo_image', None),
|
|
'page_type': getattr(request, 'seo_type', 'website'),
|
|
'canonical_url': getattr(request, 'canonical_url', request.build_absolute_uri()),
|
|
}
|
|
|
|
# Merge defaults with page-specific
|
|
seo = {**default_seo, **{k: v for k, v in page_seo.items() if v}}
|
|
|
|
# Build full title
|
|
if seo.get('page_title'):
|
|
seo['full_title'] = f"{seo['page_title']} | {seo['site_name']}"
|
|
else:
|
|
seo['full_title'] = seo['site_name']
|
|
|
|
# Use page image or default
|
|
seo['og_image'] = seo.get('page_image') or seo['site_image']
|
|
|
|
return {
|
|
'seo': seo,
|
|
'site_settings': site_settings,
|
|
}
|
|
|
|
|
|
def email_settings(request):
|
|
"""
|
|
Provides email settings context (for use in settings if needed).
|
|
"""
|
|
from reports.models import SiteSettings
|
|
site_settings = SiteSettings.get_settings()
|
|
|
|
return {
|
|
'email_settings': {
|
|
'default_from_email': site_settings.default_from_email,
|
|
'contact_email': site_settings.contact_email,
|
|
}
|
|
}
|
|
|