私はPython 2.7
,Django 1.3.1
を使用しています。Djangoはバインドされた形式の別のビューにリダイレクトします
任意のページから呼び出すことができるサインイン機能を実装しようとしていますが、コードの重複がなくても同じページにリダイレクトされます。私が現在持っている方法は、ホームページとサインインの2つのビューを持っていることです。のフォームでsign_inビューからホームビューにリダイレクトできます。主な問題は、ユーザーが間違ったデータ(パスワードが間違っているなど)を入力すると、同じページにリダイレクトしたいが元のフォームのコンテキストを送信したいということです。私は明示的にビュー関数を呼び出さずにこれを行うことができるようにしたいので、私は任意のページからそれを行うことができるようにしたい。これはどうすればいいですか?私の現在の試みは、データが無効である場合には常にアンバウンドフォームを返します。
私の現在のコードは、(simplfied)である:
urls.py
urlpatterns = patterns('myapp.views',
url(r'^$', 'index', name='home'),
url(r'sign_in/^$', 'signin', name='sign_in')
)
views.py
def index(request, loginForm=LoginForm)
extra_context = dict()
extra_context['login_form'] = loginForm
return direct_to_template(request, 'home.html', extra_context=extra_context)
def signin(request)
if request.method == 'POST':
login_form = LoginForm(request.POST, request.FILES)
if login_form.is_valid():
# login user
redirect_view = reverse('home')
return redirect(redirect_view, kwargs={'loginForm': login_form})
# I also tried:
# return redirect(redirect_view, loginForm=login_form)
# what works is:
# return index(request, loginForm = login_form)
home.html
これは、成功すると単にオリジンページにリダイレクトされます。私はlogin_formが有効でないときに懸念しています。私は元のページに対応するビューにリダイレクトしたいと思います(エラーへのリンクは、 'next'パラメータで取得できます)、エラーを示すフォームがバインドされています。 – saurabh
それはかわいいかもしれませんが、災害でもあります。エラーが発生した場合は、エラーを修正するために明示的に焦点を合わせた単一のページにユーザーを配置しないようにしますか? – Ted
はい。これは実現可能な解決策の1つですが、ユーザーが異なるように見えるページにリダイレクトされるという欠点があります。失敗したリダイレクトが同じページに実行できるかどうかを知りたい答えはいいえと思われますか? – saurabh