Как отобразить пользовательские ошибки в шаблоне - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть функция с пользовательскими ошибками, как отображать эти ошибки в шаблоне

def auth_join(request, room, slug):
if request.method == 'POST':
    user = request.user.username
    form_auth = AuthRoomForm(request.POST)
    if form_auth.is_valid():
        room_pass = form_auth.cleaned_data.get('room_pass')
        password2 = form_auth.cleaned_data.get('password2')
        if room_pass != password2:
            messages.error(request, 'Doesn\'t match')
            return HttpResponse('error')
        else:
            # messages.success(request, 'match')
            user = CustomUser.objects.get(username=user)
            room = get_object_or_404(Room, slug=slug)
            if user.has_perm('pass_perm', room):
                return HttpResponseRedirect(Room.get_absolute_url(room))
            else:
                return HttpResponse('You don\'t have access to this page')
else:
    form_auth = AuthRoomForm()

return render(request,'rooms/auth_join.html', {'form_auth':form_auth})

Я имею в виду, может быть, попытаться сделать что-то подобное, что я должен использовать istead HttpResponse и как реализовать в шаблоне

{% if form_auth.errors %}
   {% for field in form_auth  %}
    {% for error in field.errors %}
      <div class="ui red message">
        {{error}}
      </div>
    {% endfor %}
   {% endfor %}
 {% endif %}

1 Ответ

0 голосов
/ 03 апреля 2020

Ваш шаблон показывает все ошибки формы. Так что вам просто нужно убедиться, что ошибки проверки добавлены в form, а это не сделано, возвращая HttpResponse только с строкой ошибки.

У вас есть два варианта:

  • Предпочтительным маршрутом является выполнение всей проверки в вашей форме AuthRoomForm, а не в вашем представлении. Документация объясняет все способы добавления пользовательской проверки в вашу форму, наиболее распространенным является использование методов clean() и clean_<fieldname>().
  • Если вы действительно хотите сделать это в своем представлении, просто используйте метод form.add_error(), например form.add_error(ValidationError('You don\'t have access to this page')).

В обоих случаях, если форма недействительна, не return HttpResponse(<error>). Просто render() ваш шаблон со связанной формой, как показано здесь и в каждом руководстве Django для начинающих о Django формах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...