Dauerbaustelle, danke für deine Antwort. Mein ästhetisches Empfinden, wo welcher Teil des Codes wie oft stehen sollte, befriedigt das leider auch nicht.
Ich möchte nicht auf jeder HTML-Seite, die Teil des Menüs ist, den Code für das Menü wiederholen. Ich könnte `include` benutzen, doch das ist mir irgendwie suspekt, weil es keinen eigenen Kontext hat, sondern den er einbettenden Seite mit benutzt, was die Wiederverwendbarkeit über ein spezielles Menü hinaus einschränkt.
Ich betrachte das Menü als ein Implementationsdetail des Webdesigners, der sich überlegt hat, das Tabs schicker sind als einfach eine andere Liste von Hyperlinks. Ich möchte dies daher nicht im View vorsehen und dort die Titel definieren.
Ich könnte mir vorstellen, sowas zu machen:
Code: Alles auswählen
{% load menu %}
{% menu %}
{% item "Detail 1" as detail, 1 %}
{% item "Detail 2" as detail, 2 %}
{% endmenu %}
Doch dafür muss man sich eben ein eigenes Tag bauen, welches auch noch 90% des Codes von {% url %} kopieren muss, weil das leider nicht besser im Django-Code faktorisiert ist. Das erste Argument sei der anzuzeigende Titel (optional könnte man dort auch `_("...")` schreiben) und nach dem Schlüsselwort `as` kommen dann die selben Argumente wie bei {% url %}, aus denen dann eine URL berechnet wird. Ist dies die aktuelle URL (die ich aus einem dann dem Template zu übergebenen request-Parameter auslesen muss) stelle ich den Reiter als aktuell dar, ansonsten als Link. Dem Menü könnte man noch zwei Templates zuordnen, in dem der Designer Details der Darstellung der Reiter einstellen kann.
Übrigens: Das man ähnliche URLs über reguläre Ausdrücke zusammenfassen kann, ist mir schon klar, ist in diesem Beispiel aber eher zufällig. Allgemein soll es natürlich für beliebige URLs funktionieren. Das hätte ich deutlicher schreiben können.
Mein Problem ist eigentlich, dass ich nicht so recht weiß, was ich will - nur, was ich nicht will :)
Dies sagt mir nicht zu, weil ich nicht nur ein Menü und dieses nicht in den Settings definieren will. Da hat ein Designer schon mal gar nichts zu ändern.
Hier hatte jemand ein ähnliches Problem zu lösen versucht und war auch nicht wirklich zufrieden :) Seine Lösung, JavaScript zu benutzen, finde ich aber noch schlechter.
Hier ist eine extrem kompliziert aussehende Lösung, die auch die aktuelle Seite erkennen will und ein `ifactive`-Tag zur Verfügung stellt. Der Autor ist hier wie von mir oben als notwendig erwähnten Weg des Kopierens von {% url %}-Code gegangen... ach ja...
Wollte man das menu-Tag implementieren, ist
dies eine Vorlage, wie man das `item`-Kindelement finden und verarbeiten kann.
Stefan