recursive Daten in django Templates benutzten...

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 26. Februar 2007, 19:10

Mit Jinja ging das so:

Code: Alles auswählen

<ul id="main_menu">
{% for item in menu_data %}
  <li>
    <a href="{{ item.href }}" class="level_{{ item.level }}" title="{{ item.title|escape }}">
        {% if item.is_current_page %}
            <span class="current">{{ item.name|escape }}</span>
        {% else %}
            {{ item.name|escape }}
        {% endif %}
    </a>
    {% if item.subitems %}
        <ul>{% recurse item.subitems %}</ul>
    {% endif %}
  </li>
{% endfor %}
</ul>
Also mit recurse konnte ich verschachtelte Daten, wie hier ein Menü aufbauen.
Doch wie macht man das in django? Ich hab in der Doku darüber nichts gefunden...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 26. Februar 2007, 23:44

Da ich jetzt keine Lust habe mir Jinja zu installieren und es zu testen - kannst du mal schreiben, was der recurse-Tag macht?

Außerdem ist es natürlich ebenso möglich mit Django eigene Templatetags zu schreiben, also falls Django das nicht kann und keinen anderen, angenehmen Weg hat, das zu lösen ist es wahrscheinlich möglich sowas zu implementieren.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 27. Februar 2007, 09:35

Sorry, das war wohl zu wenige Info's...

Hier ein Beispiel: http://www.python-forum.de/post-39282.html#39282

Die Doku: http://wsgiarea.pocoo.org/jinja/docs/lo ... #recursion

Irgendwie kann ich mir nicht vorstellen, das man es in django selber Programmieren muß...

Wobei nach http://jjinux.blogspot.com/2006/02/pyth ... lates.html zu Urteilen muß man es doch selber machen?!?!

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 27. Februar 2007, 16:38

jens hat geschrieben:Wobei nach http://jjinux.blogspot.com/2006/02/pyth ... lates.html zu Urteilen muß man es doch selber machen?!?!
Ja, ich würde für so was einen Template-Tag schreiben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 27. Februar 2007, 17:04

Dann habe ich also keine schon bestehende Möglichkeit übersehen?

Schade.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 27. Februar 2007, 17:11

jens hat geschrieben:Dann habe ich also keine schon bestehende Möglichkeit übersehen?
Kannst ja noch in #django oder djangu-users nachfragen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 27. Februar 2007, 17:24

Hab auf der Maillingliste gefragt: http://groups.google.com/group/django-u ... d4348b0471
Bisher keine Antwort...

EDIT: Das gefunden: http://groups.google.com/group/django-u ... 157491102a
Da hat sich also jemand schon mal die Arbeit gemacht einen {% recurse %} Tag zu schreiben. Leider sind die Sourcen aber nicht mehr online :(

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Dienstag 27. Februar 2007, 17:35

jens hat geschrieben:EDIT: Das gefunden: http://groups.google.com/group/django-u ... 157491102a
Da hat sich also jemand schon mal die Arbeit gemacht einen {% recurse %} Tag zu schreiben. Leider sind die Sourcen aber nicht mehr online :(
Sind sie. Mit ein wenig Querdenken kommt man ganz leicht an den aktuellen Link: https://svn.greenpeace.org/projects/cus ... tomtags.py
TUFKAB – the user formerly known as blackbird
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 1. März 2007, 09:49

@blackbird: Dank dir, ich hatte es in der zwischenzeit allerdings selbst gefunden.

Allerdings kann ich damit wenig anfangen. Es funktioniert IMHO anders als die jinja Funktion.
Vielleicht werde ich ganz auf die django Templates verzichten und doch wieder auf jinja setzten.
Mir stinkt es z.B. auch das man seine eigene Tags/Filter explizit mit "{% load BlaBla %}" im Template laden muß.



Es gibt nun Antworten in der Maillingliste:
http://groups.google.com/group/django-u ... d4348b0471

Ich frage mich warum das niemand braucht... Ein tree-Menu ist offensichtlich im dollen Web2.0 out, was? :roll:

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 1. März 2007, 14:14

jens hat geschrieben:Mir stinkt es z.B. auch das man seine eigene Tags/Filter explizit mit "{% load BlaBla %}" im Template laden muß.
Explicit is better than implicit?

Ich habe alle meine Filter und Tags in einer Datei, dann ist das zu verschmerzen und der Load-Tag kann ja mehrere Dateien gleichzeitig laden.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 2. März 2007, 09:23

Ja, hast eigentlich recht... Dennoch bin ich in dem Falle aber für implicit ;)

Auf der Maillinliste hat nun einer sich die mühe gemacht und erklärt wie dieser greenpeace code funktionieren kann:
http://groups.google.com/group/django-u ... 79e0e9fd90
Da der Sourcecode unter GPL steht, versuche ich gerade ihn zu benutzten.

Django mag aber nicht mein Tag-Lib laden:
TemplateSyntaxError: 'pylucid_tags' is not a valid tag library: Could not load template library from django.templatetags.pylucid_tags, No module named template
Die Datei ist auch nicht unter django.templatetags.pylucid_tags zu finden, sondern unter PyLucid.templatetags.pylucid_tags... Keine Ahnung wie ich dem das klar machen soll... naja, schau ich mal...

EDIT: Ha! Bei django Fehler muß man wirklich genau lesen :?
Die Fehlermeldung ist irreführend. Denn django.templatetags.pylucid_tags ist zwar falsch. Dennoch wurde meine Lib geladen und der eigentliche Fehler steht hinten: "No module named template"
Das ist nämlich ein Import-Fehler in meiner Lib.
Das ganze ist auch bekannt: http://code.djangoproject.com/ticket/3349

Generell sind einige Fehlermeldungen von django irreführend :?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 2. März 2007, 14:53

Ja, es könnte ja alles so einfach sein... Leider ist der gefundene Code für eine ältere django Version :(

Spontan hat es nicht funktioniert den anzupassen...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 14. Mai 2007, 13:36

jens hat geschrieben:Mir stinkt es z.B. auch das man seine eigene Tags/Filter explizit mit "{% load BlaBla %}" im Template laden muß.
Dafür gibt es eine Lösung ;)

Code: Alles auswählen

# <mysite>/globaltags/__init__.py

from django.template import add_to_builtins
add_to_builtins('globaltags.pyif')
add_to_builtins('globaltags.expr')
add_to_builtins('globaltags.dbinfo')
siehe auch: http://www.djangosnippets.org/snippets/160/
und: http://groups.google.com/group/django-d ... dc5c3c5821


Dennoch bin ich mit meine Tree-Menü nicht weiter gekommen :( Ich generiere einfach den HTML Code im Skript, aber das ist eigentlich dumm. Allerdings super einfach zu realisieren.

Hat jemand eine Idee?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 30. Juli 2009, 08:11

Ist zwar schon was länger her... Aber zum Thema recursive Daten in django Templates hab ich nun eine Lösung: Mit dem include template tag, kann man das ganz gut Lösen, siehe: http://www.jensdiemer.de/_command/118/blog/detail/70/

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Donnerstag 30. Juli 2009, 08:22

Hätte ich den Thread früher gesehen, hätte ich das selbe geantwortet. Diese "recurse" ist nichts weiter als ein rekursives laden des selben Templates mit anderen Variablen. Mit "include" kann man das gleiche erreichen.

Persönlich halte ich den Einbau einer "recurse" Funktion für eine eher schlechte Design-Entscheidung. "There should be one-- and preferably only one --obvious way to do it."
Bottle: Micro Web Framework + Development Blog
Antworten