我有一个供用户更改密码的Django url,如下所示:
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中有没有处理这个问题的标准方法?
发布于 2017-02-23 11:53:21
我认为你所做的几乎就是标准的方法。至少从我在documentation中收集的信息来看。
似乎将名称定义为字符串会让您大吃一惊。我的理解是,它允许有趣的使用,如名称空间,跨模板和视图的透明使用,并使您不必在使用它的任何地方使用import。
正如@Chris所指出的,你在urls.py中所做的就是定义url名称,然后在视图和模板中使用它。
您可能可以通过定义以下内容来添加更多级别的间接寻址:
my_url_name = 'password_changed'但我看不出这是怎么回事DRYer。在反转url解析时,您需要:
reverse('Foo:' + my_url_name)这也好不到哪里去。
简而言之,把它想象成一个用引号括起来的变量名。如果您需要重命名它,您将遇到与重命名变量时完全相同的问题。
https://stackoverflow.com/questions/42405970
复制相似问题