Я разрабатываю мобильную версию своего сайта, поэтому подумал об использовании пользовательского агента в качестве критериев для обслуживания различных шаблонов для мобильной и веб-версии. Я успешно прочитал информацию пользователя-агента от nginx и передал его как заголовок серверу gunicorn.Мобильные шаблоны на основе user-agent в django, обеспечивающие безопасность потоков
Затем я создал промежуточное программное обеспечение, которое считывает этот заголовок и изменяет каталог шаблонов в файле настроек. Сначала это работало, но потом я понял, что существует условие гонки, поскольку этот метод не является потокобезопасным. (Я должен был подумать об этом раньше).
Итак, я начал думать о других альтернативах. Одним из решений было перезаписать метод рендеринга django, чтобы включить параметр «dirs» на основе заголовка запроса. Но потом я узнал, что параметр «dirs» устарел. Ниже приведена ссылочная ссылка https://docs.djangoproject.com/en/1.9/_modules/django/shortcuts/#render Так что даже это не сработает.
Другое решение состоит в том, чтобы иметь разные имена шаблонов для мобильных устройств и Интернета и загружать их соответственно. Однако я не хочу этого делать и хочу, чтобы структура каталогов шаблонов была одинаковой для веб-и мобильных.
Должен быть способ просто переписать каталог шаблонов. Это даст мне преимущество отказаться от веб-версии шаблонов, если она отсутствует в каталоге мобильных шаблонов.
Любые советы о том, как достичь этого, будут полезны.
Так организованы мои шаблоны.
App1
templates
App1
index.html
catalog.html
App2
templates
App2
about.html
И в директории проекта (не входит в папку приложения), есть папка мобильных шаблонов, который имеет следующую структуру
mobile-templates
App1
index.html
App2
about.html
Благодаря Анураг
Как насчет изменения объекта 'request' для добавления имени каталога? Затем «render» может отобразить файл, связав путь к этой переменной 'request.template_dir'. – sudshekhar
@SudhanshuShekhar - Даже если я изменяю объект запроса, как функция render автоматически примет имя каталога? Я также проверил исходный код и не нашел, что request.template_dir используется функцией render. Не знаю, пропустил ли я что-то, пожалуйста, уточните. Если вы хотите предварительно добавить имя каталога в мою функцию рендеринга, то откат в веб-версии не будет работать. – Anurag
Я думал о чем-то вроде: render (request, ["app/template/t_mobile.html", "app/template/t.html"], context) '. Вы можете использовать 'request.template_dir', чтобы решить, следует ли добавлять' t_mobile.html' в качестве опции или нет. – sudshekhar