Шаблоны против кодированного HTML - PullRequest
4 голосов
/ 12 июня 2010

У меня есть веб-приложение, состоящее из нескольких HTML-форм для поддержки некоторых таблиц (SQlite, с CherryPy для веб-сервера). Сначала я сделал это полностью «по пути Python» и сгенерировал строки html. код с общими заголовками, нижними колонтитулами и т. д., определенными как функции в отдельном модуле.

Мне также нравится идея шаблонов, поэтому я попробовал Jinja2, что, на мой взгляд, весьма удобно для разработчиков. Сначала я думал, что шаблоны - это путь, но тогда страницы были простыми. После того, как были представлены файлы .css и .js (необязательно в той же папке, что и файлы .html), и появилось постоянно растущее число переменных {{...}} и команд {% ...%}, во время разработки все стало беспорядочно, хотя во время выполнения они выглядели великолепно. Все стало еще сложнее, когда мне понадобился дополнительный javascript в разделах or.

Насколько я вижу, основными преимуществами использования шаблонов являются: Не динамические элементы страницы могут быть легко просмотрены в браузере во время дизайна. За исключением {} заполнителей, HTML хранится отдельно от кода Python. Если в вашей компании есть дизайнер веб-страниц, они все равно могут создавать, не зная Python.

в то время как некоторые недостатки: {{}} разделители видны при просмотре во время разработки в браузере Связанные файлы .css и .js должны находиться в одной папке, чтобы видеть эффекты в браузере во время разработки. Данные, переменные, списки и т. Д. Должны быть подготовлены заранее и либо объявлены глобально, либо переданы в качестве параметров функции render ().

Итак, когда использовать «жестко закодированный» HTML, а когда использовать шаблоны? Я не уверен в том, какой путь лучше, поэтому мне было бы интересно услышать мнение других разработчиков.

TIA, Алан

Ответы [ 5 ]

5 голосов
/ 12 июня 2010

Хотя я не являюсь разработчиком Python, я отвечу здесь - я считаю, что идея использования шаблонов является общей для PHP и Python.

Использование шаблонов имеет много-много преимуществ, как

  • поддержание кода в чистоте. Очень важно отделить «логический» (контроллерный) код от «view», поверьте мне, работать над проектами, которые смешивают вывод HTML / CSS / JS, действительно сложно.
  • Хранение HTML в отдельных файлах не требует изменения самого кода. Например, размещение в коде контроллера (код Python) может потребовать, чтобы вы ставили косую черту перед каждым символом.
  • Вы можете попросить своего веб-дизайнера изучить основы синтаксиса шаблонов, таким образом, он может вам сильно помочь, не разрушая вашу работу над логикой (что довольно часто случается, когда человек, не имеющий опыта работы с данным языком, что-то изменяет)

на самом деле есть еще много преимуществ, но они наиболее важны для меня.

Недостаток only заключается в том, что вы должны передавать параметры в функцию рендеринга ... которая не требует большой работы, поверьте мне :) В любом случае это намного проще, чем поддерживать любой проект, который смешивает логику с видом.

Как правило, вы должны взглянуть на> вопрос о плюсах и минусах MVC Что такое MVC и каковы его преимущества?

4 голосов
/ 12 июня 2010

Самый простой способ решить проблему статических файлов - использовать относительные пути при обращении к ним в html. Например: <img src="static/image.jpg" />

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

  1. Ведение файла, полного простых структур данных, содержащих примеры значений для всех ваших шаблонов.
  2. Используйте микрорамку, такую ​​как Werkzeug , чтобы обслуживать http на локальном компьютере.
  3. Напишите обработчик корневого запроса, который сканирует ваш список структуры данных или каталог шаблонов, чтобы создать страницу индекса со ссылками на все ваши шаблоны.
  4. Напишите дополнительный обработчик запросов для некорневых запросов, который отображает запрошенный шаблон с одноименной структурой данных.

Вы можете написать этот инструмент за несколько часов, и это делает дизайн шаблона очень удобным. Одна приятная особенность встроенного wsgi-сервера Werkzeug в том, что он может автоматически перезагружаться, когда обнаруживает, что файл изменился. Вы можете оставить свой мини-сервер включенным, пока вы редактируете шаблоны и весь день нажимаете на ссылки на странице индекса.

1 голос
/ 12 июня 2010

Как разработчик Seaside, я не вижу смысла в шаблонах, если ваш дизайнер может делать CSS. На практике я считаю невозможным сохранять шаблоны СУХОЙ. Взгляните на этот вопрос , чтобы увидеть преимущества использования кода (DSL) для генерации вашей страницы. Конечно, вы можете быть связаны наследством.

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

Я только что прочитал Джеффа Этвудса "Что не так с CSS". Это снова проблема, давно решаемая в мире малых разговоров с Phantasia DSL

1 голос
/ 12 июня 2010

Я думаю, что шаблоны по-прежнему лучший способ отделить презентацию от бизнес-логики.Ключ - это хороший шаблонизатор, в частности, тот, который может принимать решения в самом шаблоне.Для Python я обнаружил, что шаблонизатор Genshi довольно хорош.Он используется системой отслеживания Trac Wiki / Issue и является довольно мощным, но при этом позволяет легко работать с шаблонами.

Для других задач я обычно использую модуль BeautifulSoup .Я создам простую HTML-страницу, проанализирую ее с BeautifulSoup, использую полученный объект, чтобы добавить необходимые данные, а затем запишу выходные данные по назначению (обычно это файл для меня).

1 голос
/ 12 июня 2010

Я очень рекомендую использовать шаблоны. Шаблоны помогают создать хорошую структуру MVC для вашего приложения. Код Python, который генерирует HTML, ИМХО, неверен. Я говорю это потому, что код Python должен отвечать за выполнение логики, а не беспокоиться о представлении. Синтаксис шаблона, как правило, достаточно ограничен, так что вы не можете делать много логики внутри шаблона, но вы можете использовать любую логику для конкретного типа презентации, которая вам может понадобиться.

YMMV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...