2

この/stage/ stagenameのようなページを提供するアプリがあります。芸名は可変です。URLマッパーは、そのスロットを埋めるために[0-9A-Za-z]+を探すだけです。

これで、セットアップにより、アプリは/ stage/ stagenameにルートされます。これを変更することはできません(セットアップに大幅な変更を加える必要がありますが、これは今のところ面倒で最後のオプションです)。

を使用する必要がありますdjango.contrib.auth。ログインURLとログアウトURLは、アプリのルートによって変更されるため、設定ファイルに含めることができません(1つは/ stage / foo / loginで、もう1つは/ stage / bar / loginである可能性があります)。 )。

バックエンドでこのような動的URLを使用するにはどうすればよいですか?

また、URLを生成するテンプレートにstagenameパラメーターを渡す必要があるという問題もあります。どうやってやるの?

4

2 に答える 2

1

redirect_toログイン テンプレートのコンテキストに入ることができれば、リダイレクト URL を変更するために使用できるメカニズムがあります。

ログイン テンプレートで、非表示の入力をフォームに追加します。

<input type="hidden" name="next" value="{% url redirect_to %}">

urls.py ファイルで、リダイレクトに使用する入力を指定できます。

url(r'^login/$',
    auth_views.login,
    {'template_name': 'registration/login.html',
     'redirect_field_name': 'next'},
    name='auth_login'),

これを行うと、 の値に応じて別の場所にリダイレクトされますredirect_to

redirect_to複数の名前付きログイン URL を持つことで、コンテキストに入ることができる場合があります。

url(r'^login/$',
    auth_views.login,
    {'template_name': 'registration/login.html',
     'redirect_field_name': 'next',
     'extra_context': {'redirect_to': 'foo_url'}
    },
    name='foo_login'),

url(r'^login/$',
    auth_views.login,
    {'template_name': 'registration/login.html',
     'redirect_field_name': 'next',
     'extra_context': {'redirect_to': 'bar_url'}
    },
    name='bar_login'),

または、そのようなことをしたくない場合は、代わりにセッションで何かを使用できます。

<input type="hidden" name="next" value="{% url session.redirect_to %}">

これがお役に立てば幸いです。コードにタイプミスがある場合はお詫びします。認証ログインビューのドキュメントは、リンクするのが少し難しいです。そのリンクにアクセスして、少し上にスクロールしてください。

于 2011-08-27T01:56:12.347 に答える
0

/ stage / foo / loginと、その他の場合は/ stage / bar / login)の場合があります。

url( r'^stage/(?P<name>[^/]+)/login/$', some_view_function )

あなたが探しているものかもしれません。

ただし、これよりも大きな問題があるようです。「面倒すぎる私の設定への大規模な変更」は、より深刻で根本的な問題を示しています。

于 2010-10-25T11:01:24.147 に答える