Django form.errors не отображается в шаблоне - PullRequest
0 голосов
/ 03 июля 2018

Я обновил эту страницу stackoverflow и попытался отобразить ошибку моих форм в HTML-шаблоне. Я сделал:

    {% if form.error %}
    {% for field in form %}
        {% for error in field.errors %}
            <div class="alert alert-danger">
                <strong>{{ error|escape }}</strong>
            </div>
        {% endfor %}
    {% endfor %}
    {% for error in form.non_field_errors %}
        <div class="alert alert-danger">
            <strong>{{ error|escape }}</strong>
        </div>
    {% endfor %}
{% endif %}

как сказано в вопросе stackoverflow, я также попытался просто сделать:

{% if form.error %}
This should pop up if there is an error
{% endif %}

Ничего не приходит независимо от: Вот мой код view.py:

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password2')
            user = authenticate(username=username, password=password)
            login(request, user)
            return HttpResponseRedirect('/')
        else:
            print(form.errors)
    form = UserCreationForm()
    return render(request, 'registration/register.html', {'form': form})

Я могу вывести ошибки формы на консоль django, но она не отображается в шаблоне.

Печать form.errors вывод на консоль: <li>password2<ul class="errorlist"><li>The two password fields didn&#39;t match.</li></ul></li></ul>

1 Ответ

0 голосов
/ 03 июля 2018

forms.errors загорелась, но в конце вы объявляете новую форму form = UserCreationForm() как раз перед тем, как визуализировать свой вид.

После проверки, является ли form действительным или нет, все ваши ошибки проверки находятся внутри form экземпляра, запомните процессы, запущенные как последовательность, в конце вы уничтожите переменную form с помощью form = UserCreationForm() так что ошибок проверки больше нет.

Что вы можете сделать, это добавить эту новую форму form = UserCreationForm() в оператор else, когда ваш метод запроса GET, чтобы сохранить пустую форму. Добавляя оператор else, вы избегаете нового назначения формы; после процесса проверки он перейдет к render(request,....) с экземпляром form, содержащим все ошибки проверки

if request.method == 'POST':
    form = UserCreationForm(request.POST)
    if form.is_valid():
        form.save()
        username = form.cleaned_data.get('username')
        password = form.cleaned_data.get('password2')
        user = authenticate(username=username, password=password)
        login(request, user)
        return HttpResponseRedirect('/')
     else:
         print(form.errors)
<b>else:</b>
    <b>form = UserCreationForm()</b>
return render(request, 'registration/register.html', {'form': form})

Обратите внимание, правильный вызов для ошибок формы в шаблонах - form.errors с с , а не form.error

<s>{% if form.error %}</s>  <b>{% if form.errors %}</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...