我有一个Django网址供用户更改密码,如下所示:
url(r'^change-password$', views.user_change_password, name='change_password'),
url(r'^change-password/done/$', views.user_changed_password, name='password_changed')
views.user_change_password
的位置:
def user_change_password(request):
response = password_change(request,
template_name=r"Foo/Account/change_password.html",
post_change_redirect=reverse('Foo:password_changed'))
return response
这很有效,但在我看来,必须在两个不同的地方指定查找名称password_changed
违反了DRY的原则。
Django有没有一种标准方法可以解决这个问题?
答案 0 :(得分:1)
我认为你所做的几乎是标准的做法。至少从我在documentation收集到的内容。
似乎将名称定义为字符串会让你失望。我的理解是,它允许有趣的用途,如命名空间,跨模板和视图的透明使用,并使您免于import
在任何地方使用它。
正如@Chris指出的那样,您在urls.py
中所做的是定义网址名称,然后在使用的视图和模板中它
您可以通过定义:
来添加更多级别的间接my_url_name = 'password_changed'
但我不知道DRYer是怎么回事。在撤消网址分辨率时,您需要:
reverse('Foo:' + my_url_name)
这不是更好。
简而言之,将其视为引号中的变量名称。如果您需要重命名它,您将遇到与重命名变量时完全相同的问题。