Как я могу сделать шаблон и затем перенаправить на определенный URL в Django? - PullRequest
1 голос
/ 30 июня 2011

У меня проблема с представлениями Django. У меня есть URL / signup.html , который имеет вид и отображает форму. Действие этой формы указывает на / account / create , поэтому, когда все в порядке, я делаю перенаправление на страницу с поздравлениями, но когда форма отправлена, она недействительна, мне нужно вернуться к последнему URL со словарем ошибки, но когда я выполняю render_to_response URL в адресной строке, это account / create и должно / signup.html .

Вот код:

def signup(request):
    return render_to_response('main/signup.html' , {} , context_instance=RequestContext(request))

def create_account(request):
    if request.method == 'POST':
        form = FastSignupForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            return redirect('/account/congratulations' , {} , context_instance=RequestContext(request))
    else:
        form = FastSignupForm();

    return render_to_response('main/signup.html', {'form':form} , context_instance=RequestContext(request))

def congrats(request):
    return render_to_response('main/congrats.html', {}, context_instance=RequestContext(request))

Что я делаю не так?

EDIT: Если я отправляю по одному и тому же URL (signup.html), когда я перезагружаю страницу, я отправляю несколько сообщений и хочу предотвратить это.

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Почему бы не публиковать на тот же URL (signup.html), а затем перенаправлять только в случае успеха?

0 голосов
/ 01 июля 2011

Я не понимаю, почему вам нужно перейти на /account/create.Не могли бы вы просто сделать это:

views.py

def signup(request):
    if request.method == 'POST':
        form = FastSignupForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            return redirect('/account/congratulations' , {} , 
                         context_instance=RequestContext(request))
    else:
        form = FastSignupForm();

    return render_to_response('main/signup.html', {'form':form} , 
                 context_instance=RequestContext(request))

def congrats(request):
    return render_to_response('main/congrats.html', {}, 
                 context_instance=RequestContext(request))

main / signup.html

...
<form method="post" action=".">
    ...
</form>
...

Я не уверен, действительно ли вам нужно перейти на create_account() или нет, но если вы этого не сделаете, это должно сработать для вас.

...