2010-05-24 10 views
8

Ho costruito un sito Django che vivrà alla radice quando è in diretta. In questo momento funziona perfettamente all'indirizzo IP. A scopo di test, il client ha indicato un URL proxy, ma l'url ha/cartella/percorso in esso, quindi nessuno dei pattern URL corrisponde. Ho messo (/ cartella/percorso)? in tutti i pattern URL in modo che ora rispondano, ma tutti i link sono interrotti perché sto usando il tag {% url%} e mentre i pattern URL corrisponderanno al percorso opzionale, non lo includono in quel tag.Django: prefisso URL a livello di sito

Chiaramente posso solo hard-code/folder/path in tutti i miei url (beh, in tutte le url include) fino a quando il test è completo, ma c'è un modo migliore per farlo?

risposta

5

È possibile gestirlo quando si distribuisce l'applicazione, impostando correttamente WSGIScriptAlias nella configurazione di Apache (supponendo che si stia utilizzando mod_wsgi, cosa che si dovrebbe fare). Questo viene trasmesso a Django, che quindi esegue automaticamente il prefisso di tutte le ricerche inverse di URL con il valore corretto. Non dovresti aver bisogno di fare del manuale con i prefissi.

+2

Per chiarire, in altre parole, assicurarsi che il punto di montaggio dell'URL utilizzato con WSGIScriptAlias ​​nel back-end corrisponda all'URL su cui è montato con qualsiasi proxy front-end. Finché sono uguali, allora tutti dovrebbero funzionare bene rispetto ai prefissi. –

+1

@Daniel e la distribuzione di nginx + uwsgi? – panchicore

+0

@Daniel Roseman Sto distribuendo la mia app django in apache localmente su xampp e ho questo 'WSGIScriptAlias ​​/ dj /" c: /xampp/htdocs/commons/mod.wsgi "' ma quello che sei sembra che io debba prefisso il urls nella mia app già sviluppata con/dj /. Se ti capisco correttamente, dj dovrebbe essere prefissato automaticamente ma non è così. Cosa mi sto sbagliando – flexxxit

1

Per questo scopo, utilizzo URL_PREFIX in settings.py e lo aggiungo in ogni include in urls.py. Lo aggiungo anche all'inizio di MEDIA_URL, perché tutte le immagini/i collegamenti css/js funzionino. Ma mi piacerebbe anche conoscere qualche altra soluzione complicata?

0

se WSGIScriptAlias ​​non funziona o non è possibile configurarlo per qualche motivo, ricordare che la funzione include() in un urlconf aggiunge il prefisso a tutti gli URL. puoi creare un urlconf che include il tuo urlconf di root corrente e montarlo sul prefisso, quindi indirizzare il tuo file settings.py su quel urlconf.

Disclaimer: non ho provato da solo, ma dovrebbe funzionare.