Ответ 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
: Инкапсулирует текст, который не должен быть экранирован или должен быть подвергнут санитарной обработке.
Подробнее см. справочную документацию.