Verwenden Sie die Renderfunktion als Pseudo-HTML-Tag in mako

Verwenden Sie die Renderfunktion als Pseudo-HTML-Tag in mako

In mako können Sie die definierte Renderfunktion wie ein Pseudo-HTML-Tag verwenden. (Verwenden Sie Bootstrap-Dropdown-Beispiel) Insbesondere wird der folgende Code in HTML gerendert.

<!-- drop down widget -->
<%namespace file="./widget.html" name="w"/>

<%w:dropdown name="DropDown" id="dropdownMenu1">
  <%w:menu id="first" href="#">Action</%w:menu>
  <%w:menu href="#">Another Action</%w:menu>
  <%w:menu href="#">Something else here</%w:menu>
  <li role="presentation" class="divider"></li>
  <%w:menu href="#">Separated link</%w:menu>
</%w:dropdown>

Dieser Code wird wie unten beschrieben in HTML (Leerzeilen entfernen).

<div class="dropdown">
  <button class="btn dropdown-toggle" type="button" id=dropdownMenu1 data-toggle="dropdown">
    DropDown
    <span class="caret"></span>
  </button>
  <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
    <li role="presentation"><a id=first role="menuitem" tabindex="-1" href="#">Action</a></li>
    <li role="presentation"><a  role="menuitem" tabindex="-1" href="#">Another Action</a></li>
    <li role="presentation"><a  role="menuitem" tabindex="-1" href="#">Something else here</a></li>
    <li role="presentation" class="divider"></li>
    <li role="presentation"><a  role="menuitem" tabindex="-1" href="#">Separated link</a></li>
  </ul>
</div>

Details unten

In mako gibt es zwei Möglichkeiten, die Renderfunktion aufzurufen.

Wenn das folgende Renderfunktionsformular definiert ist.

## helpers.html
<%def form="(action, method)">
<div class="form">
<form action="${action}" method="${method}">
</form>
</div>
</%def>

Es gibt zwei Möglichkeiten, es zu nennen. Die erste wird im Format $ {foo} wie die Variablenerweiterung aufgerufen.

<%namespace file="./helpers.html" name="h"/>
## form
${h.form(action="#", method="POST")}

Sie können auch wie folgt schreiben. Dies ist die zweite Form.

<%namespace file="./helpers.html" name="h"/>
## form
<%h:form action="#" method="POST"></%h:form>

Es kann in einem tagartigen Format aufgerufen werden.

Mit Caller.body () kann der Aufrufer einen Wert intern einbetten

Das Gute daran, es in einem tagartigen Format aufrufen zu können, ist, dass Sie einen Wert in den Codeblock einbetten können.

##Es kann wie folgt geschrieben werden.
<%h:form action="#" method="POST">
  <div class="field has-feedback">
    <label>name:<input type="text" name="name"/></label>
  </div>
</%h:form>

Anschließend können Sie den äußeren Teil zuerst umbrechen und das innere Element zum Zeitpunkt des Aufrufs festlegen. Verwenden Sie dazu caller.body (). Wenn Sie den Code wie folgt ändern, funktioniert das obige Beispiel.

<%def form="(action, method)">
<div class="form">
<form action="${action}" method="${method}">
${caller.body()}
</form>
</div>
</%def>

Vollständiger Code zum Ausführen des ersten Beispiels

gist

Referenz

Recommended Posts

Verwenden Sie die Renderfunktion als Pseudo-HTML-Tag in mako
Verwendung der in .mako (.html) direkt in mako definierten Renderfunktion
Verwenden Sie die Rückruffunktion in Python
Verwenden Sie Stoff wie in Python (Stoff3)
Verwenden Sie Python im Docker-Container als Pycharm-Interpreter