3 Stimmen

django - Verwendung eines gemeinsamen Headers mit einigen dynamischen Elementen

Ich plane, eine Website mit Django zu erstellen, die einen gemeinsamen Header für die gesamte Website haben wird. Ich habe die Dokumentation von django zur Vererbung von Vorlagen gelesen, aber ich kann keine elegante Lösung für die "dynamischen" Elemente in meinem Header finden.

Zum Beispiel wird die Kopfzeile der Website Registerkarten enthalten, die etwa so aussehen http://www.google.com/ (wo es "Web", "Bilder" usw. gibt), wobei die ausgewählte Registerkarte Ihre aktuelle Position auf der Website beschreibt.

Mit dem django Template Vererbung, würde es scheinen, wie Sie eine Basis-Vorlage wie diese erstellen würde:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <link rel="stylesheet" href="style.css" />
    <title>{% block title %}My Amazing Site{% endblock %}</title>
</head>
<body>
<div id="header">
    {% block header %}
     .... html to create tabs ...
    {% endblock header %}
</div>

und auf allen anderen Seiten würde ich dies tun:

{% extends "base.html" %}
{% block header % }
 .... html to create tabs with one tab "selected" ...
{% endblock header %}

was ärgerlich ist, da jede einzelne meiner Seiten doppelten HTML-Code mit den Kopfzeileninformationen enthalten müsste, der sich jedoch leicht unterscheidet. Wenn es also an der Zeit ist, eine neue Registerkarte hinzuzufügen, muss ich jede einzelne HTML-Datei ändern.

Nach weiterer Lektüre scheint es, dass es noch andere mögliche Lösungen gibt:

1 - Erstellen Sie ein benutzerdefiniertes Template-Tag, das die aktuell ausgewählte Registerkarte aufnimmt, so dass ich in jeder HTML-Seite nur einen Aufruf tätige: {% block header %} {% mycustomtag abc %} {% endblock header %}

Mir gefällt diese Lösung nicht, da sie die Einfügung von HTML in den Python-Code zur Erstellung dieses benutzerdefinierten Tags erfordern würde.

2 - Erstellen Sie eine bestimmte Anzahl von Untervorlagen von base.html, die alle die entsprechende Registerkarte enthalten. Dann würde jede Seite von der entsprechenden Untervorlage erben, je nachdem, welche Registerkarte sie auswählen möchten.

Diese Lösung scheint in Ordnung zu sein, abgesehen von der Tatsache, dass sie eine X-fache Anzahl von fast genau demselben HTML-Code erfordert und immer noch das Problem mit sich bringt, dass alle Dateien geändert werden müssen, wenn eine Registerkarte hinzugefügt oder entfernt wird.

3 - Verwenden Sie Javascript (z. B. Jquery), um die Kopfzeile beim Laden der Seite zu ändern und die richtige Registerkarte auszuwählen.

Diese Lösung ist in Ordnung, aber dann müsste man daran denken, diese Funktionalität zu jeder Seite Javascript hinzufügen. der gute Teil ist, dass die Kopfzeile HTML würde nur in einer einzigen HTML-Datei leben.

Haben Sie noch andere Vorschläge?

Danke!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X