Flask / Jinja2 - Logik und Templating trennen

Django, Flask, Bottle, WSGI, CGI…
Antworten
ramsy
User
Beiträge: 9
Registriert: Donnerstag 10. September 2015, 19:20

Hallo zusammen,

ich bin neu in Python, Flask und Jinja und versuche mich gerade an dem Tutorial von http://blog.miguelgrinberg.com/post/the ... -templates

Nun schlägt er in seinem Blog vor in den Templates zum Beispiel if else zu nutzen. Siehe hier:

Code: Alles auswählen

 <head>
    {% if title %}
    <title>{{ title }} - microblog</title>
    {% else %}
    <title>Welcome to microblog</title>
    {% endif %}
  </head>
Nun habe ich aber gehört, dass man Logik möglichst vom Template trennen soll. Was für mich auch logisch scheint.

Nun mein Problem. Ich verstehe nicht, wie ich zum Beispiel von meiner routes.py aus diese Logik aus dem Template bekommen sollte.

Meine routes.py:

Code: Alles auswählen

from app import app
from flask import render_templates


@app.route('/')

@app.route('/index')
def index():
    #fake user
    user = {'nickname': 'John Doe'} 
Nun müsste ich ich ja z.B. hier irgendwie auch eine logik einbauen können die sowas sagte wie:
"Wenn Varibale Titel gesetzt ist, dann schreib <title>{{ title }} - microblog</title>. Wenn dem nicht so ist schreib <title>Hallo kein Titel</title>

Ich hoffe ich konnte meine Frage irgendwie darstellen. Ich frage mich einfach wie ich Logik in Python auf ein Template in Jinja/HTML anwenden kann.

Ich danke euch für die Hilfe vorab.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@ramsy: zum ersten sollte es wohl besser

Code: Alles auswählen

<head>
    <title>{% if title %}{{ title }} - microblog{% else %}Welcome to microblog{% endif %}</title>
</head>
heißen. Zum zweiten heißt es ja nicht, dass Templates keine Logik enthalten sollten, sondern man sollte die Anzeige-Logik von der Verarbeitungslogik trennen.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Überhaupt gar keine Logik im Template zu haben funktioniert nicht. Was passiert wenn man diesen extremen Weg geht sieht man sehr gut an Django Anwendungen, deren Templates, sofern sie nicht trivial sind, häufig grausame Hacks enthalten um doch etwas an Logik zu haben. Aus diesem Grund stellt auch Jinja2 diese Funktionalität zur Verfügung, wäre es eine schlechte Idee sie zu benutzen gäbe es sie nicht.

Was du vermeiden solltest sind Dinge wie Datenbankabfragen zu machen oder Daten aus dem Kontext weiterzuverarbeiten, von formatieren abgesehen, bevor sie angezeigt werden.
ramsy
User
Beiträge: 9
Registriert: Donnerstag 10. September 2015, 19:20

Hallo zusammen,

danke für die Aufklärung und Tips. Das hat mir weiter geholfen.
Antworten