Как организовать код для приложения Flask с несколькими наборами шаблонов

Я пишу приложение с помощью Flask и хочу сгенерировать разный код для настольных и мобильных браузеров. ИМХО, было бы неплохо сохранить идентичный код приложения и подтолкнуть проблему обслуживания различного контента вниз по стеку на уровне шаблона, поэтому по сути это становится вопросом написания двух наборов шаблонов для двух вариантов использования и поиска способа чтобы выбрать правильный для использования при каждом отдельном запросе. Я использую механизм шаблонов Jinja2 по умолчанию с Flask.

Я должен упомянуть, что у меня нет опыта работы с Flask, и я изучаю его, пока пишу код — я тоже воспринимаю это как упражнение :)

Какой механизм вы бы использовали для решения этой проблемы и обеспечения максимально возможной чистоты исходного кода?


person Luke404    schedule 01.11.2011    source источник


Ответы (2)


Отвечаю сам себе :)

В итоге я использовал это решение:

import flask
# patch flask.render_template()
_render_template = flask.render_template
def _my_render_template(*args, **kwargs):
    if detect_mobile_browser(flask.request.user_agent.string):
        args = ('m/' + args[0],) + args[1:]
    return _render_template(*args, **kwargs)
flask.render_template = _my_render_template

пока это работает, и я просто поместил «мобильные шаблоны» в подкаталог m/.

person Luke404    schedule 07.11.2011
comment
комментируя про себя: это также было кратко обсуждено в списке рассылки Flask: для стандартных и мобильных браузеров/" rel="nofollow noreferrer">flask.pocoo.org/mailinglist/archive/2011/11/7/ - person Luke404; 15.02.2012

Я хотел бы указать вам, возможно, несколько в другом направлении.

Многие дизайнеры и разработчики (включая меня) видят будущее веб-дизайна не в разделении шаблонов, а в наличии одного шаблона, который динамически реагирует на окружающую среду. То есть он переупорядочивает свои элементы таким образом, который лучше всего подходит для данного дисплея.

Это называется отзывчивым дизайном. Я знаю, что это, вероятно, не то решение, которое вы искали, но оно может стать намного лучше.

person Octavian A. Damiean    schedule 07.11.2011
comment
В общем, ваше предложение хорошее, но не ответ на этот конкретный вопрос. Я хотел бы перейти к тому, чтобы иметь один набор шаблонов с более или менее чистым содержимым и выполнять все стили и перетасовку с помощью CSS3, но на данный момент нам проще иметь два набора шаблонов. справляться. Это станет веб-приложением для наших клиентов, и более или менее каждая страница имеет другой шаблон... слишком много для нас, незнакомых с CSS, чтобы справиться с этим! - person Luke404; 08.11.2011
comment
Конечно. Я просто хотел, чтобы вы знали, так как это звучит очень похоже на то, что вам нужно. - person Octavian A. Damiean; 08.11.2011
comment
Да, этот и (хороший) дизайнер готов работать за еду :) Серьезно, спасибо, я добавил вашу ссылку в закладки в нашем NOTES.txt. Как я уже сказал, я хочу когда-нибудь попасть туда. Хорошей идеей может быть начать с (более простого) макета с фиксированной шириной для настольного браузера и использовать мобильную версию, чтобы начать создавать гибкий макет, который в конечном итоге станет единственным. Но мы отвлеклись от поставленного вопроса. - person Luke404; 08.11.2011