Самый простой способ - это, вероятно, поместить форму вручную в базовый шаблон, например, так:
{% if user.is_authenticated %}
<form action="{% url login %}" method="POST">{% csrf_token %}
<input id="username-field" name="username" type="text" />
<input id="password-field" name="password" type="password" />
<button type="submit">Login</button>
</form>
{% else %}
{# display something else here... #}
{% endif %}
, а затем просто напишите представление, подключенное к URL-адресу с именем «login», чтобы обработать форму, как вы это обычно делаете (используя объект формы, который соответствует форме выше) Попросите представление перенаправить на request.META['HTTP_REFERER']
, чтобы отобразить его на той же странице, что и отправленная.
Этот подход позволяет избежать промежуточного программного обеспечения или необходимости сделать форму доступной для каждого шаблона через контекст.
Обновление : Есть некоторые проблемы с этим подходом; нужно подумать об этом немного больше. Надеюсь, это, по крайней мере, приведет вас в правильном направлении.