@yabivipil

Как сделать midleware в django, который меняет TEMPLATE_DIRS?

Нужно сделать мобильную версию для сайта. Решил в middleware определять мобилка ли это и в зависимости от этого подставлять нужный шаблон.
Однако при переходе по урлу я получаю прежние шаблоны.
Использую django1.7 и python 3.
class DetectMobileBrowser():
    def process_request(self, request):
        if request.META.get('HTTP_USER_AGENT'):
            user_agent = request.META['HTTP_USER_AGENT']
            .....
            if mobile:
                settings.TEMPLATE_DIRS = settings.MOBILE_TEMPLATE_DIRS
            else:
                settings.TEMPLATE_DIRS = settings.DESKTOP_TEMPLATE_DIRS
  • Вопрос задан
  • 183 просмотра
Решения вопроса 1
@marazmiki
Укротитель питонов
Когда Вы делаете такие штуки, нужно иметь в виду, что объект settings глобален. Вот зайдёте Вы с мобильной версии, миддльварь сменит TEMPLATE_DIRS. А сразу же следом за Вами (пока джанга не успела начать рендерить шаблон) — кто-нибудь с компьютера. И значение TEMPLATE_DIRS вернётся в исходное.

Ключевое слово для поиска решения — thread locals.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@devel787
Есть батарейка https://github.com/gregmuellegger/django-mobile
Возможно, исходники чем-то вам помогут.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы