Web2py - So injizieren Sie HTML
Frage
Ich habe Zeilen verwendet.xml (), um die HTML -Ausgabe zu generieren. Ich möchte wissen, wie Sie HTML -Codes zu dieser generierten HTML -Seite hinzufügen, z.
rows=db(db.member.membership_id==request.args[0]).select(db.member.membership_id
,db.member.first_name,db.member.middle_name
,db.member.last_name)
return rows.xml()
Lösung
Es gibt viele HTML -Helfer, die Sie verwenden können, zum Beispiel:
html_code = A('<click>', rows.xml(), _href='http://mylink')
html_code = B('Results:', rows.xml(), _class='results', _id=1)
html_page = HTML(BODY(B('Results:', rows.xml(), _class='results', _id=1)))
usw.
Sie können sogar automatisch eine ganze Tabelle erstellen:
table = SQLTABLE(rows, orderby=True, _width="100%")
und wählen Sie es dann auseinander, um Links einzufügen oder seine Elemente zu ändern.
Es ist sehr mächtig und normalerweise müssen Sie sich nicht die Mühe machen, die tatsächliche HTML selbst zu schreiben. Hier ist das Cheatsblatt, oder Sie können direkt auf dem überprüfen Website -Dokumentation.
Bearbeiten: Nur um sicherzustellen, dass Sie die gesamte HTML -Seite nicht generieren müssen. Es ist einfacher, Web2Py Ihre Antwort in eine Vorlage einfügen zu lassen, die denselben Namen wie Ihr Controller hat (oder eine bestimmte Vorlage mit erzwingen response.view = 'template.html'
. Das Dokumentations -Tutorial erklärt dies besser und weiter.
In einigen Worten, wenn Sie die Funktion implementieren index
, Sie könnten entweder eine Zeichenfolge zurückgeben (die gesamte Seite HTML, die das zu sein scheint, wofür Sie gehen) oder ein Wörterbuch, um Vorlagen zu verwenden.
Codieren Sie im ersten Fall einfach Ihre Funktion wie folgt:
def index():
# ... code to extract the rows
return HTML(BODY(B('Results:', rows.xml(), _class='results', _id=1))).xml()
Schreiben Sie ansonsten eine HTML -Vorlage in Ansichten/Regler/Idex.html (oder eine andere Datei, wenn Sie die einfügen response.view=...
in Ihrer Funktion, um dieselbe Vorlage wieder zu verwenden), was wie folgt sein könnte:
<html><head></head>
<body>
{{=message}}
</body>
</html>
und geben Sie ein Wörterbuch zurück:
def index():
# ... code to extract the rows
html = B('Results:', rows.xml(), _class='results', _id=1)
return dict(message=html)
Andere Tipps
Bereiten Sie es einfach an die Zeichenfolge vor/fügen Sie es an, die rows.xml()
kehrt zurück:
html = '<html><head>...</head><body>' + rows.xml() + '</body></html>'