Как сделать midleware в django, который меняет TEMPLATE_DIRS?
Когда Вы делаете такие штуки, нужно иметь в виду, что объект settings глобален. Вот зайдёте Вы с мобильной версии, миддльварь сменит TEMPLATE_DIRS. А сразу же следом за Вами (пока джанга не успела начать рендерить шаблон) — кто-нибудь с компьютера. И значение TEMPLATE_DIRS вернётся в исходное.
Ключевое слово для поиска решения — thread locals.
Есть батарейка https://github.com/gregmuellegger/django-mobile
Возможно, исходники чем-то вам помогут.