41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
"""
|
|
Middleware for theming app
|
|
|
|
Note:
|
|
This middleware depends on "django_sites_extensions" app
|
|
So it must be added to INSTALLED_APPS in django settings files.
|
|
"""
|
|
|
|
|
|
from django.conf import settings
|
|
from django.utils.deprecation import MiddlewareMixin
|
|
|
|
from .models import SiteTheme
|
|
from .views import get_user_preview_site_theme
|
|
|
|
|
|
class CurrentSiteThemeMiddleware(MiddlewareMixin):
|
|
"""
|
|
Middleware that sets `site_theme` attribute to request object.
|
|
"""
|
|
def process_request(self, request):
|
|
"""
|
|
Set the request's 'site_theme' attribute based upon the current user.
|
|
"""
|
|
# Specifying a "site_theme" querystring param takes precedence
|
|
qs_theme = request.GET.get('site_theme')
|
|
|
|
# Determine if the user has specified a preview site
|
|
preview_site_theme = get_user_preview_site_theme(request)
|
|
|
|
if qs_theme:
|
|
site_theme = SiteTheme(site=request.site, theme_dir_name=qs_theme)
|
|
elif preview_site_theme:
|
|
site_theme = preview_site_theme
|
|
else:
|
|
default_theme = None
|
|
if settings.DEFAULT_SITE_THEME:
|
|
default_theme = SiteTheme(site=request.site, theme_dir_name=settings.DEFAULT_SITE_THEME)
|
|
site_theme = SiteTheme.get_theme(request.site, default=default_theme)
|
|
request.site_theme = site_theme
|