Я использую Python 2.7
, Django 1.3.1
.Django перенаправление на другой вид со связанной формой
Я пытаюсь реализовать функцию знака, которая может быть вызвана с произвольной страницы и перенаправляется на ту же страницу без дублирования кода. Текущий способ, который у меня есть, состоит в том, что у меня есть два вида: один для главной страницы и один для входа. Я хочу иметь возможность перенаправлять с sign_in view на домашний вид с помощью связанной формы . Основная проблема заключается в том, что когда пользователь вводит неверные данные (например, неправильный пароль), я хочу перенаправить на ту же страницу, но хочу отправить контекст исходной формы. Я хочу иметь возможность сделать это без явного вызова функции view, поскольку я хочу иметь возможность делать это с произвольной страницы. Как мне это сделать? Мои текущие попытки всегда возвращают несвязанную форму, если данные недействительны.
Мой текущий код (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
<form action="{% url sign_in %}" method="post">
{{ form.as_p }}
</form>
Это просто перенаправление на страницу orignal при успешном завершении. Меня беспокоит, когда login_form недействителен. Я хотел бы перенаправить на представление, соответствующее исходной странице (да, ссылка на это может быть получена с помощью «следующего» параметра) с связанной формой, указывающей на ошибки. – saurabh
Это может быть мило, но также может быть катастрофой. Если есть ошибки, не хотите ли вы, чтобы пользователь на одной странице со своим фокусом явно зафиксировал ошибку? – Ted
Да. Это одно возможное решение, но недостатком является то, что пользователь перенаправляется на страницу, которая выглядит по-другому. Я хочу знать, может ли неудачная переадресация быть сделана на той же странице. Кажется, ответ - нет? – saurabh