Во-первых, даже во втором примере вы должны сделать:
<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