Каковы преимущества создания HTML-разметки с помощью помощников HTML в web2py?

Я хотел бы узнать о преимуществах использования помощников HTML в web2py вместо простых элементов разметки HTML. В качестве примера я прочитал следующий код построителя HTML-разметки в приложении web2py (красноватый):

{{=A(IMG(_src=URL(r=request,c='static',f='up.png')),_href=URL(r=request,f='vote',args=['up',item.id]))}}

Написание этого кода с помощью простой HTML-разметки приводит к следующему результату:

<a href="/reddish/default/vote/up/{{=item.id}}"><img src="/reddish/static/up.png"/></a>

Я считаю, что простая HTML-разметка легче читается. Но я хотел бы узнать, есть ли какие-либо преимущества использования помощников HTML?

Кстати, одно преимущество, которое я вижу с первого взгляда, заключается в том, что вспомогательный HTML-код не требует явного написания имени приложения, а именно reddish. Помимо этого, есть ли другие преимущества использования помощников HTML?


person Mert Nuhoglu    schedule 11.11.2011    source источник


Ответы (1)


Во-первых, даже во втором примере вы должны сделать:

<a href="{{=URL('vote', args=['up', item.id])}}">
<img src="{{=URL('static', 'up.png')}}"/></a>

Всегда используйте помощник URL() для записи URL-адресов, даже в представлениях. Он обрабатывает исходящие перезаписи и знает текущее приложение (и контроллер), поэтому вам не нужно их включать (это означает, что если вы измените их имена, все URL-адреса будут по-прежнему работать). Кроме того, больше нет необходимости указывать request или использовать ключевые слова c и f (красноватое — старое приложение).

Что касается помощников, общее эмпирическое правило заключается в том, чтобы использовать их в случае, если вам нужно создать или манипулировать HTML в контроллере, модели или модуле, но использовать обычную разметку HTML (смешанную с Python, как во втором примере) в представлениях . Однако есть одно исключение, когда вам нужно построить сложную структуру HTML в представлении. В этом случае может быть проще манипулировать помощниками в одном блоке кода Python, чем смешивать обычные HTML-теги с Python. Например, если у вас есть данные в списке словарей (с ключами «f1», «f2», «f3») и вы хотите создать таблицу HTML, вы можете сделать:

{{=TABLE([TR(row['f1'], row['f2'], row['f3']) for row in rows])}}

Вы можете сделать то же самое, смешав HTML и Python, но это будет намного дольше и запутаннее.

Еще одним важным преимуществом помощников является то, что они создают сервер- боковой DOM, которым можно манипулировать в коде Python. Помощники, которые вы, скорее всего, создадите в коде своей модели/контроллера, — это формы (через FORM, SQLFORM, Crud и систему аутентификации) и таблицы (через SQLTABLE, SQLFORM.grid и Crud). Сами эти помощники содержат другие помощники, такие как таблицы, div и ul, и ими можно манипулировать на стороне сервера перед сериализацией в HTML (например).

Кроме того, у некоторых помощников есть специальные функции, которые добавляют функциональности или упрощают их использование:

  • A: то же, что и <a></a>, но также требует специальных аргументов для обработки обратных вызовов Ajax.
  • HTML: Автоматически добавляет строку типа документа в начало.
  • INPUT, OPTION: используйте специальный аргумент value для установки текущего значения и автоматически обрабатывайте установку атрибутов checked и selected соответственно.
  • OL, UL, SELECT, TR, TBODY: аналогичны своим HTML-аналогам, за исключением того, что они автоматически преобразуют безымянные аргументы (или элементы списка/кортежа), которые не являются вспомогательными, в соответствующие дочерние элементы (т. е. <li>, <option>, <td>, и <tr> соответственно). (В приведенном выше примере таблицы используется этот факт — TR() автоматически преобразует отдельные элементы в отдельные TD.)

Наконец, есть ряд помощников, которые имеют специализированную функциональность:

  • BEAUTIFY: строит HTML-представление составных объектов.
  • CODE: альтернатива <pre></pre>, которая автоматически обрабатывает подсветку кода и нумерацию строк для нескольких языков программирования.
  • MARKMIN: Преобразует код markmin в HTML.
  • MENU: создает вложенные ul из вложенного списка кортежей.
  • TAG: Универсальный генератор тегов и парсер HTML.
  • XML: инкапсулирует текст, который не следует экранировать или который следует очистить.

Дополнительную информацию см. в документации по вспомогательным функциям.

person Anthony    schedule 11.11.2011
comment
Это было отличное объяснение. Спасибо большое :) - person Mert Nuhoglu; 11.11.2011