Extend über Template

Django, Flask, Bottle, WSGI, CGI…
Antworten
beukelaer
User
Beiträge: 12
Registriert: Dienstag 21. August 2018, 14:15

Ich möchte in die index.html-Seite die header.html-Seite mit einbinden, sodass diese anstatt "ABC" angezeigt wird.

header.html:

Code: Alles auswählen

{% extends 'private/header.html' %}


{% block content %}
<h1>Hello World</h1>
{% endblock %}

index.html:

Code: Alles auswählen

{% load static %}
<html>
    <head>
        <title>Django Girls blog</title>
    </head>
<body>
    <div class="page-header">
        <h1><a href="/">Django Girls Blog</a></h1>
    </div>
    <div class="content container">
        <div class="row">
            <div class="col-md-8">
                    {% block content %}ABC
                    {% endblock %}
            </div>
        </div>
    </div>
</body>
</html>
Teil der settings.py:

Code: Alles auswählen

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
Teil der url.py:

Code: Alles auswählen

urlpatterns = [
    path('now/', views.current_datetime),
    path('', views.current_datetime)]
    
Projektaufbau: https://www.dropbox.com/s/ct2s7bf1ocmy3 ... t.PNG?dl=0


Die Index.html Seite kann ich ohne weiteres sehen. Die header-Seite baut er aber nicht in die Seite ein. Hat jmd eine Idee?
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@beukelaer: Das ist ein bisschen verwirrend. Da wo Du 'header.html' drüber geschrieben hast, erweiterst Du 'private/header.html' — wie sieht *das* denn aus? Oder versuchst Du da ein Template sich selbst erweitern zu lassen? Und welches Template verwendest Du zum rendern? Das müsste ja das 'header.html' sein.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
beukelaer
User
Beiträge: 12
Registriert: Dienstag 21. August 2018, 14:15

Danke für die Hilfe :) Ich gebe dir Recht, dass header.html zu index.html umbenannt werden muss.
Ergebnis:

Code: Alles auswählen

{% extends 'private/index.html' %}
Leider fügt django es immer nicht ein.

Eigentlich wollte ich durch die header.html (sowie später auch noch footer.html) die index.html zusammenbauen.
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@beukelaer: So ganz klar ist mir jetzt immer noch nicht was Du da nun genau hast/machst. Und auch noch nicht so genau was Du machen willst.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@beukelaer: Du kannst in einem gerbten django-Template innerhalb eines blocks den Inhalt des überladenen blocks mit "{{ block.super }}" einbinden.
beukelaer
User
Beiträge: 12
Registriert: Dienstag 21. August 2018, 14:15

Also die index.html, liste.html, impressum.html enthält eine:
-Navigationsleiste
-Inhalt (Tabellen, Grafiken, Texte,..)
-Fußleiste

Daher habe ich mich dazu entschlossen für die Navigationsleiste eine Header.html zu erstellen. Die ist in index, liste, impressum nahezu fast identisch (es wird dort nur die aktuelle Seite erkannt und die jeweilige farblich hervorgehoben).

Passt die Idee nicht zum obigen Code?

Ich denke block.super wäre für die Idee nicht das Optimale oder?
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Deinen ursprünglichen Beitrag hatte ich wohl zu schnell gelesen. Was Du vermutlich möchtest, ist eine base.html Datei, die alle Elemente enthält, welche alle anderen Templates gemeinsam haben.
beukelaer
User
Beiträge: 12
Registriert: Dienstag 21. August 2018, 14:15

genau :))

Der obige Code funktioniert leider noch nicht :/
beukelaer
User
Beiträge: 12
Registriert: Dienstag 21. August 2018, 14:15

Der Fehler war, dass ich die Einbindung von header und index vertauscht habe ;)
Antworten