如何在Django中保持干爽

时间:2017-02-23 02:32:12

标签: python django

我有一个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有没有一种标准方法可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

我认为你所做的几乎是标准的做法。至少从我在documentation收集到的内容。

似乎将名称定义为字符串会让你失望。我的理解是,它允许有趣的用途,如命名空间,跨模板和视图的透明使用,并使您免于import在任何地方使用它。

正如@Chris指出的那样,您在urls.py中所做的是定义网址名称,然后在使用的视图和模板中它

您可以通过定义:

来添加更多级别的间接
my_url_name = 'password_changed'

但我不知道DRYer是怎么回事。在撤消网址分辨率时,您需要:

reverse('Foo:' + my_url_name)

这不是更好。

简而言之,将其视为引号中的变量名称。如果您需要重命名它,您将遇到与重命名变量时完全相同的问题。