Frage

Ich habe einige benutzerdefinierte Logik, die jedes einzelne Mal, wenn eine URL ausgeführt werden muss, umgekehrt wird, auch für Anwendungen von Drittanbietern. Mein Projekt ist ein Multi-Tenant-Web-App, und der Mieter identifiziert wird basierend auf der URL. Es gibt keine einzige gültige URL, die keine Mieter Kennung enthält.

Ich habe bereits eine Wrapper-Funktion um reverse, aber jetzt brauche ich einen Weg, um jede installierte App zu sagen, es zu benutzen. Die Hülle um reverse verwendet ein gewinde lokalen die Kennung in die resultierende URL zu injizieren. Ich konnte diese Funktion als Dekorateur auf reverse schreiben, aber ich weiß nicht, wo die eigentliche Dekoration zu tun.

Mäßig Firm Constraint: Ich bin bereits mit 3 3rd-Party-Anwendungen, und ich werde wahrscheinlich mehr hinzuzufügen. Eine Lösung sollte nicht von mir verlangen, den Quellcode aller dieser Drittanbieter-Anwendungen zu ändern. Ich genieße nicht die Idee von Patches auf den mehr 3rd-Party-Quelle Bäume beibehalten, wenn es ein einfacherer Weg. Ich kann die Dokumentation macht deutlich, dass reverse dekoriert wurde.

Die ursprüngliche Frage: Wo könnte ich eine solche Änderung vornehmen, die es garantiert zu jedem Aufruf von reverse gelten würde

?

Mögliche Alternative Frage: Was ist ein besserer Weg, sicherzustellen, dass jede URL-einschließlich derjenigen, die von 3rd-Party-Anwendungen-bekommt die Mieter Kennung? Übrigens, ich bin offen für eine bessere Art und Weise irgendetwas davon mit Ausnahme der Einbettung des Mieter-ID in der URL zu behandeln; Diese Entscheidung ist ziemlich in Stein jetzt eingestellt. Danke.

Danke.

War es hilfreich?

Lösung

Nur so, so dass django Rückwärts durch ur_reverse ersetzt wird, ist

django.core.urlresolvers.reverse = ur_reverse

oder wenn man so will Dekorateur syntaktischen Zucker

django.core.urlresolvers.reverse = ur_reverse_decorator(django.core.urlresolvers.reverse )

, das ich nicht beraten (und viele werden schreien), es sei denn, Sie sind nicht bereit, jede Verwendung von Reverse mit ur_reverse zu ändern

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top