[Django] Lazy template tags?

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ist es möglich so etwas wie lazy template tags zu implementieren?

Beispiel:

Code: Alles auswählen

<html><body>
{% breadcrumbs %}
{% blog %}
</body>
</html>
Die Blog "Applikation" soll bei den breadcrumbs noch Links einfügen können...


In PyLucid hab ich dazu eine Aufwendigere und eigentlich unschöne Lösung. Die Funktioniert zwar, aber ich möchte sie verbessern.

In PyLucid heißt das context-middleware, siehe: http://www.pylucid.org/en/contribute/de ... middleware

Das Prinzip ist einfach:
Im Template steckt man Platzhalter wie z.B. <!-- ContextMiddleware breadcrumbs -->
Zu beginn eines Request, werden die ContextMiddleware Plugin initialisiert und alle anderen Plugins, wie z.B. das Blog, können die ContextMiddlewares nutzten und so z.B. einen Link in die Breadcrumbs einfügen...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Warum machst du daraus keinen Block und erweiterst dessen Inhalt statt ihn komplett zu überschreiben?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

In der Tat. Wenn es nur um das erweitern der breadcrumbs Leiste geht, könnte man das so machen. Also mit block und super arbeiten.
So wird es ja auch mit der Navigation im django admin panel gemacht.

Das ganze hat allerdings auch Nachteile. Man kann keine Programmlogik auf diese Daten anwenden oder die Daten per Template rendern.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Die inclusion-tags kennst du?
https://docs.djangoproject.com/en/dev/h ... usion-tags

Damit hast du deine beiden Anforderungen erschlagen.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hm. Ja das müßte gehen...

Haupttemplate:

Code: Alles auswählen

...
<p>
{% if preferences.print_index %}
  <a href="{{ preferences.index_url }}">{{ preferences.index|escape }}</a>{{ preferences.separator }}
{% endif %}
  {% block breadcrumbs %}{% include "breadcrumbs.html" %}{% endblock breadcrumbs %}
</p>

...
breadcrumbs.html:

Code: Alles auswählen

  {% for link in linklist %}
    <a href="{{ link.url }}"{% if link.title %} title="{{ link.title|escape }}"{% endif %}>{{ link.name|escape }}</a>
    {% if not forloop.last %}{{ preferences.separator }}{% endif %}
  {% endfor %}
Das Blog plugin macht dann in etwa:

Code: Alles auswählen

{% block breadcrumbs %}{{ block.super }}{% include "breadcrumbs.html" %}{% endblock %}

Wäre eine Überlegung wert...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten