2017-02-23 3 views
0

Ich habe eine URL Django für Benutzer ihr Passwort zu ändern, die wie folgt aussieht:Wie DRY in Django bleiben

url(r'^change-password$', views.user_change_password, name='change_password'), 
url(r'^change-password/done/$', views.user_changed_password, name='password_changed') 

Wo views.user_change_password ist:

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 

Dies funktioniert, aber es scheint, für mich, dass die Angabe des Lookup-Namen password_changed an zwei verschiedenen Orten das Prinzip der DRY verletzt.

Gibt es einen Standard Weg in Django damit umzugehen?

+2

Das sieht mir sehr nach 'def myfunc (...)' und 'x = myfunc()' aus, dh: Sie definieren etwas und benutzen es dann. Ich bin nicht sicher, wie viel DRYer es bekommen kann ... –

+0

Ich könnte es DRYer machen, indem ich es als Konstante irgendwo anders definiere, und dann das an beiden Orten benutze. Ich bin neu in Django, also habe ich mich gefragt, ob es einen Standardweg gibt. – Batman

+0

@Batman, so 'foo = 'foo'; bar = foo' ist nicht DRY, aber irgendwie 'baz = 'foo'; foo = baz; bar = baz' ist? – Chris

Antwort

1

Ich denke, was Sie tun, ist so ziemlich die Standardmethode, es zu tun. Zumindest von dem, was ich in der documentation sammeln.

Es scheint, dass die Definition der Namen als Zeichenfolgen Sie davon abhält. Mein Verständnis ist, dass es interessante Anwendungen wie Namespacing, transparente Verwendung über Vorlagen und Ansichten ermöglicht und Sie von überall dort, wo Sie es verwenden, speichert.

Wie @ Chris weist darauf hin, was Sie in urls.py tun ist die URL-Namen definieren und dann in Ansichten und Vorlagen Sie es verwenden.

Sie könnten wahrscheinlich mehr Dereferenzierungsebenen hinzufügen, indem Sie definieren:

my_url_name = 'password_changed' 

aber ich sehe nicht, wie das Dryer ist. Wenn Sie die URL-Auflösung umkehren, benötigen Sie:

das ist nicht viel schöner.

Kurz gesagt, denken Sie an einen Variablennamen in Anführungszeichen. Wenn Sie es umbenennen müssen, haben Sie genau das gleiche Problem wie beim Umbenennen einer Variablen.