2014-12-07 7 views
1

Итак, вопрос довольно прост. Конечный пользователь заполняет форму и отправляет запросы, я хочу, чтобы страница затем перезагрузилась (в случае успеха). Проблема в том, что форма находится на каждой странице профиля пользователя, а не статическом URL-адресе. Так что я не могу сделать:Как отобразить текущую страницу в views.py?

return HttpResponseRedirect('/accounts/{{ username }}') 

Я знаю, что я не могу передать переменную в данном примере, но я не знаю, как еще это сделать. Есть ли другой способ сделать то, что я пытаюсь сделать здесь? Есть ли способ обновить текущую страницу? Я не ищу ни одного решения ajax прямо сейчас, просто просто пытаюсь перезагрузить текущую страницу при отправке формы.

ответ

4

Вы не должны перезагружать одну и ту же страницу, если ее запрос POST, вы всегда должны перенаправлять (см. PRG). Поэтому я предполагаю, что вы имеете в виду, что вы хотели бы перенаправить на тот же взгляд при успешном представлении.

Вы можете получить вошедшего в систему пользователя с request.user, так что вы, возможно, захотите попробовать что-то вроде этого:

from django.shortcuts import render, redirect 

def some_view(request): 
    form = SomeForm(request.POST or None) 
    if form.is_valid(): 
    # do something 
    return redirect('/accounts/{}'.format(request.user)) 
    return render(request, 'form.html', {'form': form}) 

Однако, было бы лучше, если бы вы назвали ваш шаблон счета URL:

url('/accounts/(?P<username>\w+)/$', 'some.view', name='user-home') 

Теперь вы можете сделать это:

def some_view(request): 
    form = SomeForm(request.POST or None) 
    if form.is_valid(): 
     # do something 
     return redirect('user-home', username=request.user) 
    return render(request, 'form.html', {'form': form}) 
+0

Великий ответ. Спасибо. – stephan

Смежные вопросы