Benutzer-Werkzeuge

Webseiten-Werkzeuge


django

Dies ist eine alte Version des Dokuments!


Model

  • liegen in der Regel in models.py
  • definieren die Grundobjekte
    • eigentlich sind sie die Datenbankdarstellung
    • bringen Methoden mit um Objekte aus der Datenbank zu erstellen/zu filtern oder darin zu speichern
    • ein Objekt enthält die Daten eines „Objektes“ in der Datenbank/ist ein Datensatz

Template

Bedingungen

case/switch/select-Anweisung

Gibt es nicht - muss durch if-Anweisungen abgebildet werden.

if-else

{% if Bedingung %}
      Code
{% else %}
      Code
{% endif %}

Ab django 1.4 existiert auch {% elif %}, voher kann man sich mit:

{% load assign %}
{% assign name="Variablenname" %} 0 {% endassign %}

{% if Bedingung %}
       Code
       {% assign name="Variablenname" %} 1 {% endassign %}
{% endif %}
{% if Bedingung AND Variablenname == 0 %}
       Code
       {% assign name="Variablenname" %} 1 {% endassign %}
{% endif %}
{% if Bedingung AND Variablenname == 0 %}
       Code
{% else %}
       Code
{% endif %}

Man setzt einfach eine Variable wenn ein if-Zweig durchlaufen wurde und prüft bei allen folgenden if-Anweisungen ob diese Variable auf 0 steht, steht sie auf 1, wurde bereits ein if-Zweig durchlaufen und es soll kein weiterer if-Zweig durchlaufen werden. Man erhält so eine case- oder switch-Anweisung.

Sonstiges

Variablen zuweisen

  • Geht standardmäßig nicht
  • Kann durch django-templateaddons (Name des Paketes) nachinstalliert werden



Zuweisung:

{% assign name="Variablenname" %} 1 {% endassign %}

Auslesen:

{{ Variablenname }}


bzw. letztendlich wie jede andere interne Variable auch

Hinweis: Möglicherweise funktioniert Assign nur beim höchsten Eltern-Template (also bei Vererbung/verschachtelten Templates das Höchste - das was kein „extends“ mehr enthält)

Limits

  • Placeholder lassen sich nicht auf Inhalt prüfen
    • Man kann also nichts abhängig davon machen
  • Blocks lassen sich nicht auf Inhalt prüfen
    • Man kann also nichts abhängig davon machen

Troubleshooting

Problem Beschreibung Mögliche Lösung
Ein oder alle Blöcke ({% Block Name %}) werden leer ausgegeben Obwohl die Blöcke einen Inhalt haben sollten, werden sie ohne Inhalt in der Website angezeigt - es kommt keine Fehlermeldung Der Name eines oder mehrere Blöcke (es müssen alle Ebenen bei vererbten Templates geprüft werden) steht nicht in „ “.

Also (Falsch):
{% Block main %}
statt (Richtig):
{% Block „main“ %}
Ausgabe „The _imaging C module is not installed“PIL (Python Image Librarie) vermisst das Modul _imaging bzw. das Modul ist nicht gegen die Systembibliotheken gelinkt.PIL ist nur teilweise in Python relaisiert, ein Teil wird durch C-Bibliotheken erledigt (u.a. libjpeg) die über das PIL-eigene C-Modul _imaging realisiert wird.
Vor allem in virtualenv kann es nach dem verschieben auf eine andere Maschine zu Problemen kommen.

  • PIL deinstallieren (pip uninstall PIL)
  • python-dev installieren (aptitude install python-dev)
  • dev-Pakete der gewünschten Bildformate installieren (Zum Beispiel libjpeg-dev)
  • PIL installieren (pip install PIL)

Durch das deinstallieren und wieder installieren wird _imaging neu compiliert und gegen die vorhandenen Systembibliotheken gelinkt

django.1681414627.txt.gz · Zuletzt geändert: 2023/04/13 21:37 von root