代码之家  ›  专栏  ›  技术社区  ›  TM. Randy Simon

django-在设置中使用反向URL映射

  •  37
  • TM. Randy Simon  · 技术社区  · 15 年前

    例如,django设置文件中的一些选项是URL。 LOGIN_URL LOGIN_REDIRECT_URL . 是否可以避免硬编码这些URL,而使用反向URL映射?目前,这确实是我发现自己在多个地方编写相同URL的唯一地方。

    2 回复  |  直到 7 年前
        1
  •  52
  •   Alasdair    7 年前

    Django 1.5及更高版本

    自Django 1.5起, LOGIN_URL LOGIN_REDIRECT_URL 接受命名的URL模式。这意味着您不需要在设置中硬编码任何URL。

    LOGIN_URL = 'login'  # name of url pattern
    

    对于django 1.5-1.9,您也可以使用视图函数名,但不建议这样做,因为它在django 1.8中已被弃用,在django 1.10+中不起作用。

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

    Django 1.4

    对于django 1.4,您可以使用 reverse_lazy

    LOGIN_URL = reverse_lazy('login')
    

    Django 1.3及更早版本

    这是原来的答案,以前是有效的。 懒惰的人 添加到Django

    在urls.py中,导入设置:

    from django.conf import settings
    

    然后添加URL模式

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

    注意你需要切片 登录网址 删除前导正斜杠。

    壳牌:

    >>>from django.core.urlresolvers import reverse
    >>>reverse('login')
    '/accounts/login/'
    
        2
  •  13
  •   linqu    8 年前

    在Django开发版本中,Reverse_Lazy()成为一个选项: https://docs.djangoproject.com/en/dev/ref/urlresolvers/#reverse-lazy