[Flask] Content spezifisch pro URI ausgeben

Django, Flask, Bottle, WSGI, CGI…
Antworten
overflow
User
Beiträge: 11
Registriert: Sonntag 30. Dezember 2012, 00:18

Manchmal sterbe ich an Perfektion und finde dann keine Lösung - oder keine die m.E. elegant ist ''-.-
Vielleicht kann mir hier jemand freundlicherweise helfen...

Folgendes Szenario:

Meiner Startseite ('/') übergebe ich ein Template wie folgt über views.py

Code: Alles auswählen

@views.route('/')
def index():
    with open('public/content/content.de-DE.json', 'r') as f:
        data = json.load(f)
        return render_template('page/content/single-cms-page.html', content=data)
Das Template single-cms-page.html ist wie folgt aufgebaut

Code: Alles auswählen

{% block single_cms_page_doctype %}
    <!DOCTYPE html>
{% endblock %}

{% block single_cms_page_html %}
    <html lang="de">
{% endblock %}

{% block single_cms_page_head %}
    {% include 'layout/misc/meta.html' %}
{% endblock %}

{% block single_cms_page_body %}
    <body>

        {% block single_cms_page_header %}
            <header class="hero">
                {% block single_cms_page_header_inner %}
                    {% include 'layout/header/header-hero.html' %}
                {% endblock %}
            </header>
        {% endblock %}

        {% block single_cms_page_navigation %}
            <nav>
                 {% include 'layout/navigation/navigation.html' %} 
            </nav>
        {% endblock %}

        {% block single_cms_page_main %}
            <main>
                {% block single_cms_page_content %}
                    {% include 'page/content/detail.html' %}
                {% endblock %}
            </main>
        {% endblock %}

        {% block single_cms_page_footer %}
            <footer>
                 {% include 'layout/footer/footer.html' %}
            </footer>
        {% endblock %}

    </body>
{% endblock %}
Einige Bereiche aus der Contentdatei sollen in die "header" des Templates fließen. Ein Großteil wiederrum soll in die page/content/detail.html übertragen werden.

Ich denke könnte Sinn machen in der views.py zu prüfen, welche URI aufgerufen wird, dann die entsprechende Contentdatei an die single-cms-page.html und detail.html zu übergeben, oder was meint ihr?

Würde mich über Denkanstöße und Code-Schnippsel freuen.

- overflow
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

overflow hat geschrieben: Samstag 28. August 2021, 13:09 Ich denke könnte Sinn machen in der views.py zu prüfen, welche URI aufgerufen wird, dann die entsprechende Contentdatei an die single-cms-page.html und detail.html zu übergeben, oder was meint ihr?
Was ist denn das Ziel des Ganzen?
Es gibt ja die Möglichkeit Pfadparameter auszuwerten. Du hättest zum Beispiel für alle unterstützen Sprachen eine JSON-Datei.

Code: Alles auswählen

@views.route('/<lang>')
def index(lang = "de-DE"):
    # Hier validierung des lang-Parameters
    with open(f'public/content/content.{lang}.json', 'r') as f:
        data = json.load(f)
        return render_template('page/content/single-cms-page.html', content=data)
Wenn ich das richtig sehe, wird "content" im Template gar nicht genutzt. Aber du könntest zum Beispiel so auf die Daten zugreifen:

Code: Alles auswählen

{{ content }}
overflow
User
Beiträge: 11
Registriert: Sonntag 30. Dezember 2012, 00:18

Ja stimmt content habe ich nicht genutzt. Darauf greife ich in untergelagerten Templates drauf wie detail.html.

Das Ziel ist es gerade mir ein modulares Template-Grundgerüst aufzubauen, was für verschiedenste Projekte eingesetzt werden kann um dann mit der Zeit ein eigenes "CMS" daraus zu entwickeln.

In erster Linie möchte ich weiter Erfahrung mit Flask und Jinja sammeln.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

overflow hat geschrieben: Donnerstag 2. September 2021, 11:15 Darauf greife ich in untergelagerten Templates drauf wie detail.html.
Das ist auch eine gute Vorgehensweise. Im Detail hängt das natürlich davon ab was man gerade umsetzen will.
Antworten