Подтвердить что ты не робот

Каковы преимущества создания 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-помощников?

4b9b3361

Ответ 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 и систему Auth) и таблицы (через SQLTABLE, SQLFORM.grid и Crud). Эти сами помощники содержат другие помощники, такие как таблицы, divs и ul, и их можно манипулировать на стороне сервера, прежде чем сериализоваться в HTML (например).

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

  • A: То же, что и <a></a>, но также принимает специальные аргументы для обработки обратных вызовов Ajax.
  • HTML: автоматически добавляет строку doctype.
  • 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: Инкапсулирует текст, который не должен быть экранирован или должен быть подвергнут санитарной обработке.

Подробнее см. справочную документацию.