Я использую Python 2.7
, Django 1.3.1
.
Я пытаюсь реализовать функцию входа в систему, которая может быть вызвана с произвольной страницы и перенаправляет на ту же страницу без какого-либо дублирования кода.В настоящее время у меня есть два представления: одно для домашней страницы и одно для входа. Я хочу иметь возможность перенаправить из представления sign_in на домашний вид с связанной формой .Основная проблема заключается в том, что когда пользователь вводит неверные данные (например, неверный пароль), я хочу перенаправить на ту же страницу, но хочу отправить контекст исходной формы.Я хочу иметь возможность сделать это без явного вызова функции представления, поскольку я хочу иметь возможность сделать это с произвольной страницы.Как мне это сделать?Мои текущие попытки всегда возвращают несвязанную форму, если данные неверны.
Мой текущий код (упрощенный):
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>