Frage

Ich versuche, einen Jinja2 Makro zur Ausgabe in verschiedenen Teil der anrufenden Vorlage zu erhalten. Der Grund, warum ich will‘, dies zu tun ist, weil es Inline-Javascript als Teil des Makros ist, aber ich will alle Javascript am Ende der Vorlage. Ich mag im Grunde so etwas wie diese

tun
{% import 'tooltip.html' as tooltip %} 
<html>
  <body>
    {% block contents %}
    {% tooltip('mytool') %}
    {% endblock %}
    <script>
      {% block javascript %}
      {% endblock %}
    </script>
  </body>
</html>

Und in der Makrodatei

{% macro tooltip(name) %}
  <div id='{{ name }}'>
    This is my tooltip
  </div>

  {% block javascript %}
  jQuery("#{{ name }}").click(function(){//do something});
  {% endblock %}
{% endmacro %}

So ist das Endergebnis wäre so etwas wie

<html>
  <body>
    <div id='mytool'>
      This is my tooltip
    </div>
    <script>
      jQuery("#mytool").click(function(){//do something});
    </script>
  </body>
</html>

Ich möchte alle meine Javascript am Ende meiner Vorlage, aber Makros scheinen zurückzukehren nur dann und dort.

Gibt es etwas, was ich bin fehlt oder ist dies über Standard Jinja2 und würde erfordern eine Erweiterung zu schreiben?

Danke

War es hilfreich?

Lösung

Ich bin mir nicht sicher, ob es möglich ist, zu tun, was Sie in Jinja sind gefragt. Aber ich denke, einen anderen Ansatz funktionieren könnte und bieten eine einfachere Lösung:

Statt Erzeugung Markup wie

<div id='mytool'>
  This is my tooltip
</div>

und ein entsprechender jQuery-Aufruf mit jedem ID Tooltip fest einprogrammiert wie

<script>
  jQuery("#mytool").click(function(){});
</script>

für jeden Tooltip auf einer Seite, geben jedem Tooltip ein class Attribut und die Arbeit jQuery Funktionalität machen auf alle Elemente mit dieser class. Auf diese Weise kann jede Seite die gleich generisch bisschen jQuery hat und arbeitet unabhängig davon, was Tooltips erscheinen auf der jeweiligen Seite.

Etwas mehr wie:

<div id="mytool" class="tooltip">
  This is my tooltip
</div>

plus ein allgemeinere jQuery Aufruf:

<script>
  // This will add the onclick handler to any element
  // with a class of "tooltip"
  jQuery(".tooltip").click(function(){});
</script>

Der jQuery-Code kann einmal aufgenommen werden, an der Unterseite der „Basis“ Vorlage, so dass es auf jeder Seite zur Verfügung, und Sie müssen nicht herauszufinden, wie man zwei getrennte Blöcke von einem Jinja Makro zu schreiben.

Andere Tipps

Könnten Sie es in zwei Funktionen aufgeteilt? Wie, eine, die die Markup-Ausgänge und eine, die gibt das Javascript? Das wäre der einfachste Weg, es zu tun, dass ich sehe. Es Art alle auf Ihrem Anwendungsfall abhängig ist, aber ich denke, das wäre auch der „richtige Weg“ sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top