Werkzeug - wie dynamische Menüstruktur abbilden?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hallo,

ich suche eine gute Strategie für eine Webseite eine dynamische Menüstruktur zu verwalten. Das Menü soll später einmal von einem Admin über eine Konfigurationsdatei o.ä. gestaltet werden. Das Menü soll klassisch auf einer Baumstruktur mit beliebiger Tiefe basieren. An jedem Knoten des Menüs soll eine Seite dargestellt werden.

Eine erste Idee von mir war es, diese durch due URLs abzubilden. Allerdings habe ich dann das Problem, dass ich nicht mehr so komfortabel auf das passende Rendering-Modul mappen kann.

Beispiel:

Code: Alles auswählen

"/" -> start()
"/Impressum" -> article()
"/Tischtennis" -> article()
"/Tischtennis/Turnier" -> turnier()
Anhand der (Teil)-URLs könnte man nun das Menü aufbauen und wüße bei jedem Request, in welcher Tiefe man sich befindet usw.

Haken, den ich sehe: Ich kann das Rule-System von werkzeug nur bedingt ausnutzen. Für die article-Funktion wüßte ich ja doch gerne, welcher Artikel grad aufgerufen wurde. So müßte ich nun erst den Pfad auseinandernehmen und das letzte Stück als Parameter nehmen. Bei werkzeug könnte ich das sonst ja schöner so lösen:

Code: Alles auswählen

Rule("/article/<string:name>", endpoint="article")
Hier habe ich aber in der URL keine Info zum Menü.

Daher kam ich als nächstes auf die Idee das Routing statisch zu lassen und die Menüstruktur extern zu mappen, basierend auf der jetzigen URL.

Beispiel:

Code: Alles auswählen

"/article/Impressum" -> "/Impressum"
"/article/Mannschaftsfahrt" -> "/Tischtennis/Mannschaftsfahrt"
Haken hierbei: Bei komplexeren Modulen könnte die URL mehr beinhalten, als es das Menü soll. Insofern wird das Mapping dann komplexer.

So, ich hoffe das war einigermaßen verständlich und es kommen Vorschläge dazu. Ich finde in den div. Dokus dazu nichts explizit verwertbares, da dort immer von einer festen Menüstruktur ausgegangen wird. Aber vielleicht und hoffentlich habe ich ja was überlesen :-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hat denn wirklich keiner dazu eine Idee? Vielleicht gibts dazu ja Ansätze bei anderen Frameworks, die mir als Beispiel dienen könnten?
lunar

Ich verstehe dein Problem nicht ... du kannst doch einfach Werkzeug-Routing-Regeln auf die qualifizierten Namen der entsprechenden View-Funktion abbilden.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

lunar hat geschrieben:Ich verstehe dein Problem nicht
Ich verstehe Deine Antwort nicht ;-)
lunar hat geschrieben: ... du kannst doch einfach Werkzeug-Routing-Regeln auf die qualifizierten Namen der entsprechenden View-Funktion abbilden.
Könntest Du da mal ein einfaches Beispiel geben?
lunar

Eben eine Zuordnung der Art:

Code: Alles auswählen

/example/<string:some_param> –> example.views:some_endpoint
Beim Laden der Anwendung liest du die Datei, und erstellst dynamisch aus dem ersten Teil entsprechende Routen. Den Endpoint kannst du beim Dispatchen dann mit "import_string()" direkt laden und aufrufen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

lunar hat geschrieben:Eben eine Zuordnung der Art:

Code: Alles auswählen

/example/<string:some_param> –> example.views:some_endpoint
Beim Laden der Anwendung liest du die Datei, und erstellst dynamisch aus dem ersten Teil entsprechende Routen. Den Endpoint kannst du beim Dispatchen dann mit "import_string()" direkt laden und aufrufen.
Da hast Du mich falsch verstanden. Mir ist das Routing-System zum Großteil klar und auch, wie man das anhand von persistent abgelegten daten dann im Programm dynamisch zusammenbauen kann.

Mir geht es darum, dass ich Content in eine Menüstruktur einbetten will. Diese Struktur soll später vom User frei angelegt werden können. Nun ist die Frage, wie ich das Menü auf den Content mappen kann? Sollte ich die Struktur in der URL abbilden (a), oder aber lieber ein extra Mapping innerhalb der Anwendung durchführen, in der die URL auf einen Knoten im Menübaum gemappt wird (b).

Bei beidem sehe ich div. Vor- und Nachteile - denke ich zumindest. Diese habe ich versucht im 1. Posting zu beschreiben.
Antworten