40

django 設定ファイルのいくつかのオプションは URL です。たとえばLOGIN_URL、 やLOGIN_REDIRECT_URL. これらの URL のハードコーディングを回避し、代わりに逆 URL マッピングを使用することは可能ですか? 現時点では、複数の場所で同じ URL を書いているのは本当にここだけです。

4

2 に答える 2

58

Django 1.5 以降

Django 1.5 以降、名前付き URL パターンLOGIN_URLを受け入れます。LOGIN_REDIRECT_URLつまり、設定で URL をハードコードする必要はありません。

LOGIN_URL = 'login'  # name of url pattern

Django 1.5 から 1.9 では、view 関数名も使用できますが、Django 1.8 では廃止され、Django 1.10 以降では機能しないため、これはお勧めしません。

LOGIN_URL = 'django.contrib.auth.views.login' # path to view function

ジャンゴ1.4

Django 1.4の場合、使用できますreverse_lazy

LOGIN_URL = reverse_lazy('login')

Django 1.3 以前

これは、reverse_lazyDjango に追加される前に機能した元の回答です。

urls.py で、設定をインポートします。

from django.conf import settings

次に、URLパターンを追加します

urlpatterns=('',
    ...
    url('^%s$' %settings.LOGIN_URL[1:], 'django.contrib.auth.views.login', 
        name="login")
    ...
)

LOGIN_URL先頭のスラッシュを削除するには、スライスする必要があることに注意してください。

シェル内:

>>>from django.core.urlresolvers import reverse
>>>reverse('login')
'/accounts/login/'
于 2009-10-05T12:03:31.217 に答える
14

django開発バージョンでは、reverse_lazy()がオプションになります: https ://docs.djangoproject.com/en/dev/ref/urlresolvers/#reverse-lazy

于 2012-01-09T15:42:51.800 に答える