Seite 1 von 1

Extend über Template

Verfasst: Dienstag 21. August 2018, 14:26
von beukelaer
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?

Re: Extend über Template

Verfasst: Dienstag 21. August 2018, 14:40
von __blackjack__
@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.

Re: Extend über Template

Verfasst: Dienstag 21. August 2018, 16:15
von beukelaer
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.

Re: Extend über Template

Verfasst: Dienstag 21. August 2018, 17:14
von __blackjack__
@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.

Re: Extend über Template

Verfasst: Dienstag 21. August 2018, 17:40
von kbr
@beukelaer: Du kannst in einem gerbten django-Template innerhalb eines blocks den Inhalt des überladenen blocks mit "{{ block.super }}" einbinden.

Re: Extend über Template

Verfasst: Dienstag 21. August 2018, 18:44
von beukelaer
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?

Re: Extend über Template

Verfasst: Dienstag 21. August 2018, 21:04
von kbr
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.

Re: Extend über Template

Verfasst: Mittwoch 22. August 2018, 16:23
von beukelaer
genau :))

Der obige Code funktioniert leider noch nicht :/

Re: Extend über Template

Verfasst: Donnerstag 30. August 2018, 18:30
von beukelaer
Der Fehler war, dass ich die Einbindung von header und index vertauscht habe ;)