0

web2pyの本には、このコードがあります

def first():
    form = SQLFORM.factory(Field('visitor_name', requires=IS_NOT_EMPTY()))
    if form.process().accepted:
        session.visitor_name = form.vars.visitor_name
        redirect(URL('second'))
    return dict(form=form)

次のようなテンプレートで使用されています:

{{extend 'layout.html'}}
What is your name?
{{=form}}

そして、問題は次のようになります。通常、文字列や数値などのPython値は、辞書でテンプレートエンジンに渡されます。しかし、この場合に渡されるのは何であり、それをHTMLに「展開」できるようにするweb2pyについてはどうでしょうか。

DOMツリーを構築して渡すことはできますか?それとも、これは単なる大きなエスケープ文字列ですか?

4

2 に答える 2

2

この場合、FORMオブジェクト(クラス)が渡されています。FORMは、DIV、SPAN、Pなどと同様にgluon.htmlオブジェクトです。これらはすべて、クラスをHTMLの適切な表現に「展開」する「.xml」と呼ばれるメソッドを持っています。

web2pyでは、コントローラーの最後にあるdict()で任意のオブジェクトを渡し、それをテンプレートで使用できます。web2pyはテンプレートで純粋なPythonを使用するため、オブジェクトが「サポート」されていることを確認する必要はありません。任意のオブジェクトまたはプリミティブを送信できます。ただし、HTMLオブジェクトは、すべてのHTMLオブジェクトの基本クラスを継承し、オブジェクトを表す.xml()メソッドを持っている必要があります。

dom treeHTMLのスニペット(コードで階層的に構造化されている)を意味していると仮定して、aを渡すことができます。例えば:

some_text = 'even variables'

x = DIV(
  A(IMG(_src='some-img.png'), _href='http://some.link.com/awdawd'),
  SPAN('Some text for whatever reason', _class='my-class', _some_other_html_attribute='i automatically get made into an attribute in the html, via gluonic magic'),
  DIV('I am text, because I am a div, any number of arguments can be combined', 'and displayed', some_text, **{'_data-special-attr':'even-html5-microdata-is-doable'}),
  UL(LI('lists are cool too'), LI('I guess')),
  TABLE([['some objects', 'are smart'], ['and you can pass them lists of lists'], ['and they know what to do with it']])
)

return dict(content=x)

完全に有効であり、適切に「展開」されます[正しく入力したと仮定して...]

詳細については、epydocsにアクセスしてください:http ://www.web2py.com/examples/static/epydoc/web2py.gluon.html.XmlComponent-class.html

私が言及した「基本HTMLクラス」があります-それは実際にはXMLComponentと呼ばれています。

これがselectクラスです:

http://www.web2py.com/examples/static/epydoc/web2py.gluon.html.SELECT-class.html

于 2012-07-30T15:17:24.280 に答える
1

カサポは素晴らしい説明を提供します。これはすべてオンラインドキュメントで説明されていることに注意してください。ビューの章では、HTMLヘルパーサーバー側DOMのセクションを参照してください。ヘルパーとしてのオブジェクトの説明は、フォームの章FORMの冒頭にあります(フォームのDOM操作の例がここにあります)。

于 2012-07-30T15:29:04.023 に答える