Verständnissfrage zu Django

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Hallo Community,

nachdem ich endgültig die Schnauze voll habe von PHP und den ganzen CMS Systemen wie Typo3, Joomla, usw... will ich endlich mal ein Projekt mit Django auf setzen. Die grobe Funktionsweise von Django ist mir inzwischen auch klar und die ersten Webseiten stehen auch schon.

Allerdings suche ich noch eine Möglichkeit, zusätzliche "Module" in die Seite ein zu binden.
Evtl. hab ich da auch die Funktion von Django nicht richtig verstanden.

Als Bsp. ich habe eine Mainpage die ich über das View erstellt habe.
Darin wird irgend ein Content aus gegeben. Zusätzlich will ich aber so wie ich es aus der PHP Welt kenne Module bzw. Erweiterungen der Seite verwenden, die mir Börsenkurse abfragt, den Wetterbericht anzeigt usw.
In der PHP Welt wird das ja alles über Module umgesetzt die teilweise ihre eigenen Templates mit bringen.
Aber wie setze ich das bei Django um? Erstelle ich da eine APP die mir die Börsenkurse rendert und binde die dann in das MainView ein, brauche ich dazu eine Middleware oder gibts da eine Funktion für solchen Extra-Content die ich noch nicht kenne?

Für Tipps und Hinweise bin ich wie immer Dankbar!

Gruß
Damaskus
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Du könntest einen neuen Template Tag erstellen, der die Börsenkurse "einblendet". Weil das nicht ganz so einfach ist, habe ich in PyLucid eine einfaches Plugin Konzept gemacht.

Ein PyLucid Plugin ist quasi eine normale Django App, die man in ein Bestimmtes Verzeichnis packt (../pylucid_project/pylucid_plugins/ bzw. ../pylucid_project/external_plugins/).
Alle Apps in diesen Verzeichnisen werden automatisch in den settings.py bei INSTALLED_APPS und TEMPLATE_DIRS eingetragen.

Es gibt verschiedene Möglichkeiten ein Plugin dann zu nutzten/einzubinden. Das mit dem Börsenkurse könnte dann über {% lucidTag %} erfolgen. z.B.:

Code: Alles auswählen

{% lucidTag market_rate isin=12345 title="Foo Bar" %}
"Aufgerufen" wird dann die function lucidTag in der views.py vom plugin "market_rate"...

In PyLucid selbst wird das meiste über Plugings geregelt. Alle Vorhandenen Plugins liegen hier:
https://github.com/jedie/PyLucid/tree/m ... id_plugins
Doku zu den Plugins hier: http://www.pylucid.org/permalink/90/abo ... in-plugins

Weiterführende Info's: http://www.pylucid.org/permalink/134/new-v09-plugin-api


Wenn man widgets einbinden will, also quasi ein Template mit Werten füllen, gibt es dafür in PyLucid ein generisches Plugin: http://www.pylucid.org/permalink/360/in ... ric-plugin (Vorgefertigt ist YouTube und ohloh widgets)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Damaskus hat geschrieben: Als Bsp. ich habe eine Mainpage die ich über das View erstellt habe.
Darin wird irgend ein Content aus gegeben. Zusätzlich will ich aber so wie ich es aus der PHP Welt kenne Module bzw. Erweiterungen der Seite verwenden, die mir Börsenkurse abfragt, den Wetterbericht anzeigt usw.
Ich versteh noch nicht ganz was Module für dich sind, geht es darum dass du einfach zusätzliche Variablen im Template haben willst (und zwar in jedem) und diese nicht immer manuell über einen View mitübergeben willst? Dann kommen einerseits Templatetags in Frage oder Context processors: https://docs.djangoproject.com/en/dev/r ... processors
In der PHP Welt wird das ja alles über Module umgesetzt die teilweise ihre eigenen Templates mit bringen.
Ich finde dafür die inclusion Tags ganz nett.
Aber wie setze ich das bei Django um? Erstelle ich da eine APP die mir die Börsenkurse rendert und binde die dann in das MainView ein, brauche ich dazu eine Middleware oder gibts da eine Funktion für solchen Extra-Content die ich noch nicht kenne?
Vlt findest du hier https://github.com/zerok/django-flatblocks Ideen für eine solche Funktionalität.

Lg,
Florian
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

Ich versteh noch nicht ganz was Module für dich sind, geht es darum dass du einfach zusätzliche Variablen im Template haben willst (und zwar in jedem) und diese nicht immer manuell über einen View mitübergeben willst? Dann kommen einerseits Templatetags in Frage oder Context processors: https://docs.djangoproject.com/en/dev/r ... processors
Unter einem Modul stell ich mir sowas wie ein view vor, nur dass es mir nicht eine komplette HTML Datei aus gibt sondern eben einen Teil einer HTML Datei. Und ein "Masterview" sammelt all diese "Views" ein und rendert daraus die endgültige Page.
Natürlich könnt ich das auch alles in eine View rein klatschen aber das wiederspricht doch dem DRY Prinzip von Django. Wenn ich in jedes View die selben Grundfunktionen mit einbaue.
Aber wie schon gesagt kann es gut sein, dass ich da die Funktion von DJANGO noch nicht so ganz verinnerlicht habe und mich noch zu sehr von Systemen wie Joomla und Typo3 ablenken lasse.
Ich finde dafür die inclusion Tags ganz nett.
Die hab ich mir auch schon angeschaut. Allerdings erlauben inclusion Tags ja nur das Einbinden anderer Template Dateien, nicht aber von Funktionen, Modellen usw. Oder etwa doch?

@Jens:
PyLucid könnte in die Richtung gehen die ich mir vorstelle.
Allerdings hab ich noch keine Zeit gehabt es mir genauer an zu schauen. Werd ich die nächsten Tage auf jeden Fall nach holen.

Gruß
Damaskus
deets

In der TurboGears-Welt waere das denke ich ein Widget - die Implementation fuer TG2 ist ToscaWidgets. Damit definierst du Einheiten von Python-Code, HTML, statischen resourcen + dynamischem Javascript, die du wiederverwendbar benutzen kannst.

Theoretisch steht deren Nutzung in Django nix im Wege, man muss allerdings die WSGI-middleware ueber den Django-Stack stuelpen, und uU ist das doof wenn man auf Modellen arbeiten, denn dann muss man sich ja innerhalb der Transaktion befinden. Da waere eine bessere Integration vielleicht sinnvoll.
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Damaskus hat geschrieben:
Ich finde dafür die inclusion Tags ganz nett.
Die hab ich mir auch schon angeschaut. Allerdings erlauben inclusion Tags ja nur das Einbinden anderer Template Dateien, nicht aber von Funktionen, Modellen usw. Oder etwa doch?
Kann sein, dass du inclusion Tags mit {% include %} verwechselst? Inclusion Tags sind im Prinzip normale Tags die ihren Context (den du ja frei bestimmen kannst) durch ein template rendern: https://docs.djangoproject.com/en/dev/h ... usion-tags
Benutzeravatar
Damaskus
Administrator
Beiträge: 995
Registriert: Sonntag 6. März 2005, 20:08
Wohnort: Schwabenländle

apollo13 hat geschrieben:Kann sein, dass du inclusion Tags mit {% include %} verwechselst? Inclusion Tags sind im Prinzip normale Tags die ihren Context (den du ja frei bestimmen kannst) durch ein template rendern: https://docs.djangoproject.com/en/dev/h ... usion-tags
Treffer und versenkt!

Zum einen hab ich die inclusion Tags wirklich mit dem {% include %} verwechselt und zum anderen ist genau das ist die Funktionalität die ich gesucht hab! Ich hab mich sogar schon öfters durch die Seite aus der Doku gelesen, aber durch die extrem langen Seiten voll mit Infos hab ichs vermutlich jedes mal überlesen.

Danke!

Gruß
Damaskus
Antworten