Django设置文件中的一些选项是URL,例如LOGIN_URLLOGIN_REDIRECT_URL.是否有可能避免对这些URL进行硬编码,而使用反向URL映射?目前,这真的是我发现自己在多个地方编写相同URL的唯一地方.

推荐答案

Django 1.5 and later

从Django 1.5、LOGIN_URLLOGIN_REDIRECT_URL开始接受命名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

Django 1.4

对于Django 1.4,您可以使用reverse_lazy

LOGIN_URL = reverse_lazy('login')

Django 1.3 and earlier

这是最初的答案,它在Django加入reverse_lazy之前就起作用了

在URL中.输入设置:

from django.conf import settings

然后添加url模式

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

请注意,您需要切分LOGIN_URL%,以移除领先的前锋劈开.

在shell 中:

>>>from django.core.urlresolvers import reverse
>>>reverse('login')
'/accounts/login/'

Django相关问答推荐

在Django的反向函数中添加动态URL

无法在 docker 启动Django项目

当使用django-tinymce时,我在哪里指定referer?

情节主题更改问题

获取 Django (postgres) 中带注释字段的平均值

SQLite上可以正常使用Many2Many链接注释,但MariaDB上无法正常使用(生产环境)

Django rest框架:自定义对象权限不起作用

Django - 是否可以为查询集预取单个字段的多个过滤器?

可以在 github 页面上托管 django 站点吗?

django类型对象Http404没有属性get

使用 Python / Django 的 Google API 示例的 Oauth

超过 1 个外键

在 django 中的查询集上运行 explain的简单方法

如何创建一个在复选框右侧显示复选框标签的 Django 表单?

Django ORM 能否以可靠的与后端无关的方式存储无符号 64 位整数(又名 ulong64 或 uint64)?

如何在保存之前更改 Django 表单字段值?

Django 在视图之间传递数据

将属性添加到 Django 模型的 Meta 类中

django.core.servers.basehttp.FileWrapper 在 Django 1.9 中消失

AttributeError:ManyRelatedManager对象没有add属性?