zigen
@zigen

Как получить текст ошибки form.errors в view?

Добрый день.
Появилась задача таскать на каждой странице сайта форму авторизации.
Сделал через inclusion tag.

<form  method="post" action="{% url 'login' %}">
      {% csrf_token %}
      <tr>
          <td>
              <label class=""  for="name"></label>
              {{ auth_form.username }}
          </td>
          <td>
              <label class=""  for="pwd"></label>
              {{ auth_form.password }}
              <input type="submit" class="header__form_button" value="ОК">
          </td>
      </tr>
  </form>


Но не знаю как вернуть ошибку, понятное дело форму не прокинешь в любое view.
На ум пришло использовать messages.

if request.method == 'POST':
        form = AuthUserFormPanel(data=request.POST)
        if form.is_valid():
            login(request, form.get_user())
            return HttpResponseRedirect(request.META.get('HTTP_REFERER'), '/')
        messages.add_message(request, messages.ERROR, form.errors)
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'), '/')


Однако form.errors возвращает:

<ul class="errorlist"><li>__all__<ul class="errorlist nonfield"><li>Пожалуйста, введите правильные имя пользователя и пароль. Оба поля могут быть чувствительны к регистру.</li></ul></li></ul>


А мне нужно только текст
Пожалуйста, введите правильные имя пользователя и пароль. Оба поля могут быть чувствительны к регистру.

Не парсить же этот вывод?
  • Вопрос задан
  • 3203 просмотра
Решения вопроса 1
sim3x
@sim3x
понятное дело форму не прокинешь в любое view.
можно сделать так

https://docs.djangoproject.com/en/1.8/topics/auth/...

Делаешь функцию, в которую передаеш request и возвращаешь из нее словарь значей в зависимости от того залогинило или нет юзера

Можно сделать mixin для CBV
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
вопрос, кстати, хороший про получение ошибок. тоже в свое время задавался вопросом - парсить или не парсить :)
решается так :
for field in form.errors:
               error[field]=form.errors[field].as_text()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы