Я разрабатываю мобильную версию своего веб-сайта, поэтому подумал об использовании пользовательского агента в качестве критерия для обслуживания разных шаблонов для мобильной и веб-версии. Я успешно прочитал информацию об агенте пользователя из nginx и передал ее в качестве заголовка на сервер пушки.
Затем я создал промежуточное ПО, которое читает этот заголовок и изменяет каталог шаблонов в файле настроек. Сначала казалось, что это работает, но потом я понял, что происходит состояние гонки, поскольку этот метод не является потокобезопасным. (Я должен был подумать об этом заранее).
Поэтому я начал думать о других альтернативах. Одним из решений было перезаписать метод рендеринга 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
переменной. - person sudshekhar   schedule 10.03.2016render(request, ["app/template/t_mobile.html", "app/template/t.html"], context)
. Вы можете использоватьrequest.template_dir
, чтобы решить, добавлять лиt_mobile.html
в качестве опции или нет. - person sudshekhar   schedule 11.03.2016