Domanda

Ho una certa logica personalizzata che deve essere eseguito ogni volta che un URL è invertito, anche per applicazioni di terze parti. Il mio progetto è una web app multi-tenant, e l'inquilino viene identificato in base alla URL. Non c'è un singolo URL valido che non include un identificatore inquilino.

Ho già una funzione wrapper intorno reverse, ma ora ho bisogno di un modo per dire a ogni applicazione installata di usarlo. L'involucro intorno reverse utilizza un thread locale per iniettare l'identificatore nel URL risultante. Potrei scrivere questa funzione come decoratore su reverse, ma non so dove fare la decorazione vera e propria.

Vincolo moderatamente consistente: sto già usando 3 applicazioni terze parti, e io probabilmente aggiungere più. Una soluzione non dovrebbe mi richiede di modificare il codice sorgente di tutte queste applicazioni di terze parti. Io non apprezzo l'idea di mantenere le patch in cima più alberi di origine 3rd-party se c'è un modo più semplice. Posso fare la documentazione chiaro che reverse è stato decorato.

La domanda iniziale: dove ho potuto fare un tale cambiamento che garantisce che si applicherebbe a ogni chiamata di reverse

?

possibile domanda alternativo: Che cosa è un modo migliore di fare in modo che ogni URL, inclusi quelli generati da terze parti app-ottiene l'identificatore inquilino? BTW, io sono aperto a un modo migliore per gestire tutto questo, tranne l'incorporamento del locatario-id nell'URL; tale decisione è abbastanza scolpito nella pietra in questo momento. Grazie.

Grazie.

È stato utile?

Soluzione

unico modo affinché inversa Django è sostituito da ur_reverse è

django.core.urlresolvers.reverse = ur_reverse

o se vi piace decoratore zucchero sintattico

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

, che non voglio consigli (e molti saranno gridare), a meno che non sono disposti a cambiare ogni utilizzo di inversione con ur_reverse

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top