Alcune delle opzioni nel file di impostazioni di django sono url, ad esempio LOGIN_URL
e LOGIN_REDIRECT_URL
. È possibile evitare di codificare questi URL e utilizzare invece la mappatura dell'URL inverso? Al momento questo è davvero l'unico posto in cui mi trovo a scrivere gli stessi URL in più posti.Django - usa la mappatura url inversa nelle impostazioni
risposta
Django 1.5 e successivamente
Come di Django 1.5, LOGIN_URL
e LOGIN_REDIRECT_URL
accettare modelli di URL con nome. Ciò significa che non è necessario codificare gli url nelle impostazioni.
LOGIN_URL = 'login' # name of url pattern
Per Django 1,5-1,9, è anche possibile utilizzare il nome della funzione vista, ma questo non è raccomandato perché è deprecato in Django 1.8 e non funzionerà in Django 1.10+.
LOGIN_URL = 'django.contrib.auth.views.login' # path to view function
Django 1.4
per Django 1.4, è possibile potrebbe usare reverse_lazy
LOGIN_URL = reverse_lazy('login')
Django 1.3 e precedenti
questa è la risposta originale, che ha lavorato prima di reverse_lazy
è stato aggiunto al Django
In url s.py, impostazioni di importazione:
from django.conf import settings
Quindi aggiungere il modello URL
urlpatterns=('',
...
url('^%s$' %settings.LOGIN_URL[1:], 'django.contrib.auth.views.login',
name="login")
...
)
Nota che è necessario tagliare LOGIN_URL
per rimuovere la conduce in avanti barra.
Nella shell:
>>>from django.core.urlresolvers import reverse
>>>reverse('login')
'/accounts/login/'
Ah, buona soluzione, non ho considerato di andare dalle impostazioni -> URL, solo il contrario. +1 –
E si può evitare l'hard-coding della root di django, in modo che/accounts/login si risolva in/root/accounts/login se la tua app django è distribuita su example.com/root piuttosto example.com/? – gozzilli
@gozzilli: da Django 1.4, userei 'reverse_lazy' invece di importare' settings.LOGIN_URL' negli URL. Ho aggiornato la risposta. – Alasdair
In django versione di sviluppo reverse_lazy() diventa un'opzione: https://docs.djangoproject.com/en/dev/ref/urlresolvers/#reverse-lazy
+1 grazie per l'heads up! –
È programmato per la versione 1.4 di marzo 2012 –
Ecco uno snippet per le versioni precedenti: http://djangosnippets.org/snippets/499/ –
Ne dubito, poiché 'settings.py' viene caricato prima del modulo URL. Interessato a scoprirlo però. Grande domanda. –