Certaines des options du fichier de paramètres django sont des URL, par exemple LOGIN_URL
et LOGIN_REDIRECT_URL
. Est-il possible d'éviter le codage en dur de ces URL, et d'utiliser à la place la cartographie d'url inverse? Pour le moment, c'est vraiment le seul endroit où je me retrouve à écrire les mêmes URL à plusieurs endroits.Django - utiliser le mappage d'url inverse dans les paramètres
Répondre
Django 1.5 et plus tard
A partir de Django 1.5, LOGIN_URL
et LOGIN_REDIRECT_URL
accepter des modèles d'URL nommés. Cela signifie que vous n'avez pas besoin de coder en dur les URL dans vos paramètres.
LOGIN_URL = 'login' # name of url pattern
Pour Django 01.05 à 01.09, vous pouvez également utiliser le nom de la fonction de vue, mais ce n'est pas recommandé car il est dépréciée dans Django 1.8 et ne fonctionne pas dans Django 1.10+.
LOGIN_URL = 'django.contrib.auth.views.login' # path to view function
Django 1.4
Pour Django 1.4, vous pouvez pouvez utiliser reverse_lazy
LOGIN_URL = reverse_lazy('login')
Django 1.3 et versions antérieures
Ceci est la réponse originale, qui a travaillé avant reverse_lazy
a été ajouté à Django
Dans l'url s.py, les paramètres d'importation:
from django.conf import settings
ajouter ensuite le modèle url
urlpatterns=('',
...
url('^%s$' %settings.LOGIN_URL[1:], 'django.contrib.auth.views.login',
name="login")
...
)
Notez que vous devez couper LOGIN_URL
pour enlever la barre oblique.
Dans la coquille:
>>>from django.core.urlresolvers import reverse
>>>reverse('login')
'/accounts/login/'
Ah, bonne solution, je ne pensais pas aller de paramètres -> urls, seulement l'inverse. +1 –
Et pouvez-vous éviter de coder en dur la racine django, de sorte que/accounts/login se résout en/root/accounts/login si votre application django est déployée sur example.com/root plutôt qu'exemple.com/? – gozzilli
@gozzilli - depuis Django 1.4, j'utiliserais 'reverse_lazy' au lieu d'importer' settings.LOGIN_URL' dans les urls. J'ai mis à jour la réponse. – Alasdair
Dans la version de développement django reverse_lazy() devient une option: https://docs.djangoproject.com/en/dev/ref/urlresolvers/#reverse-lazy
+1 merci pour la tête haute! –
Il est prévu pour la version 1.4 en Mars 2012 –
Voici un extrait pour les versions antérieures: http://djangosnippets.org/snippets/499/ –
Je doute, puisque 'settings.py' est chargé avant que le module URL. Intéressé de savoir si. Bonne question –