2011-11-11 12 views
13

Chciałbym poznać zalety używania pomocników HTML w web2py zamiast zwykłych elementów znaczników HTML. Jako przykład, czytam następujące znaczniki HTML kod konstruktora w aplikacji Web2py (czerwonawy):Jakie są zalety budowania znaczników HTML za pomocą pomocników HTML w web2py?

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

pisania tego kodu przez zwykłych wyników HTML znaczników w tym:

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

znajdę zwykły HTML znaczniki łatwiejsze do odczytania. Ale chciałbym się dowiedzieć, czy są jakieś zalety korzystania z pomocników HTML?

Przy okazji, jedną korzyścią, którą mogę zobaczyć na samym początku, jest to, że kod HTML helpera nie wymaga jawnie wpisywania nazwy aplikacji, a mianowicie reddish. Poza tym, czy są jakieś inne zalety korzystania z pomocników HTML?

Odpowiedz

19

Po pierwsze, nawet w drugim przykładzie, należy zrobić:

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

Zawsze używaj URL() pomocnika napisać adresy URL, nawet w poglądach. Zajmuje się przepisywaniem wychodzących i zna bieżącą aplikację (i kontroler), więc nie musisz ich uwzględniać (co oznacza, że ​​jeśli zmienisz ich nazwy, wszystkie URL-e nadal będą działały). Ponadto nie ma już potrzeby określania request ani używania słów kluczowych c i f (reddish to stara aplikacja).

Jeśli chodzi o pomocników, ogólną zasadą jest użycie ich na wypadek, gdyby trzeba było utworzyć lub zmodyfikować kod HTML w kontrolerze, modelu lub module, ale aby używać zwykłego znacznika HTML (zmieszanego z Pythonem, tak jak w drugim przykładzie) w widokach. Jedynym wyjątkiem jest wtedy, gdy trzeba zbudować złożoną strukturę HTML w widoku. W takim przypadku łatwiej będzie manipulować pomocnikami w jednym bloku kodu Python, zamiast mieszać zwykłe znaczniki HTML z Pythonem. Na przykład, jeśli masz dane w liście słowników (z klawiszami F1 ",„F2”," F3) i chcesz utworzyć tabelę HTML, można zrobić:

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

Można zrobić to samo zmieszanie HTML i Python, ale byłoby to o wiele dłuższe i bardziej chaotyczne.

Inną ważną zaletą pomocników jest to, że tworzą one server-side DOM, które można modyfikować w kodzie Pythona. Pomocnicy, których najprawdopodobniej utworzysz w swoim kodzie modelu/kontrolera, to formularze (przez FORMULARZ, SQLFORM, Crud i system Auth) i tabele (przez SQLTABLE, SQLFORM.grid i Crud). Sami pomocnicy ci zawierają inne pomocniki, takie jak tabele, divy i ul, i można nimi manipulować po stronie serwera przed serializacją do kodu HTML (for example).

Ponadto, niektóre z pomocnicy mają szczególne cechy, które dodają funkcjonalność lub ułatwić ich używać:

  • A: jak <a></a>, ale również zajmuje szczególne argumenty do obsługi wywołań zwrotnych Ajax.
  • HTML: Automatycznie przedłuża ciąg znaków doctype.
  • INPUT, OPTION: Weź specjalny value argumentu, aby ustawić aktualną wartość i automatycznie obsłużyć ustawiania checked i selected atrybuty, odpowiednio.
  • OL, UL, SELECT, TR, TBODY: Podobnie jak ich odpowiedniki HTML, z wyjątkiem one automatycznie konwertować un nazwie argumenty (lub elementy listy/krotki), które nie są pomocnicy do odpowiednich elementów podrzędnych (tj <li>, <option> , <td> i <tr>, odpowiednio). (Przykład tabeli powyżej korzysta z tego faktu - w TR() automatycznie konwertuje poszczególne elementy w oddzielnych TD „s.)

Wreszcie, istnieje pewna liczba pomocników, które specjalizuje się funkcjonalność:

  • BEAUTIFY: Tworzy reprezentację HTML złożonych obiektów.
  • CODE: Alternatywa dla <pre></pre>, która automatycznie obsługuje wyróżnianie kodu i numerowanie linii dla kilku języków programowania.
  • MARKMIN: Konwertuje kod markmin na HTML.
  • MENU: Tworzy zagnieżdżone ul z zagnieżdżonej listy krotek.
  • TAG: Generator tagów uniwersalnych i analizator składni HTML.
  • XML: Enkapsuluje tekst, który nie powinien być zmieniony lub powinien zostać oczyszczony.

Aby uzyskać więcej informacji, patrz helpers documentation.

+0

To było świetne wyjaśnienie. Dziękuję Ci bardzo :) –

Powiązane problemy