Как отобразить шаблон после неудачной проверки формы? - PullRequest
1 голос
/ 27 октября 2019

urls.py:

urlpatterns = [
    path('employee/add_employee/', views.add_employee, name='add-employee'),
    path('employee/add_employee/add/', views.add_employee_action, name='add-employee-action'),
]

У меня есть add-employee страница и несколько форм для заполнения.

views.py:

def add_employee(request):
    personal_form = PersonalEmployeeForm()
    history_form = EmployeeHistoryForm()
    return render(
        request,
        'sections/add_employee.html',
        context={
            'personal_form': personal_form,
            'history_form': history_form,
            }
    )

def add_employee_action(request):
    if request.method == "POST":
        personal_form = PersonalEmployeeForm(request.POST)
        history_form = EmployeeHistoryForm(request.POST)
        if personal_form.is_valid() and history_form.is_valid():
            # here is some logic with models
            return redirect('add-employee')
    else:
        personal_form = PersonalEmployeeForm()
        history_form = EmployeeHistoryForm()
    return render(
        request,
        'sections/add_employee.html',
        context={
            'personal_form': personal_form,
            'history_form': history_form,
        }
    )

шаблон:

<form id="a-submit-form" action="add/" method="POST">
        {% csrf_token %}
        <div class="column-wrapper">
            <div class="column">
                <div class="form-wrapper">
                    {% for field in personal_form.visible_fields %}
                        {% include "elements/forms/form_line.html" %}
                        <br>
                    {% endfor %}
                </div>
            </div>
            <div class="column">
                <div class="form-wrapper">
                    {% for field in history_form.visible_fields %}
                        {% include "elements/forms/form_line.html" %}
                        <br>
                    {% endfor %}
                </div>
            </div>
        </div>
        <div class="button-bar-wrapper">
            <div class="button_bar">
                <a class="a-button positive" id="submit">Добавить</a>
                <a class="a-button" href="{% url 'employee' %}">Сотрудники</a>
                <a class="a-button" href="{% url 'index' %}">На главуную</a>
            </div>
        </div>
    </form>

Отправка по элементам проверена и хорошо работает со скриптом jQuery.

Проблема заключается в том, что после отправки недопустимых форм у меня есть страница с blah-blah/employee/add_employee/add/ URL. И если я снова попытаюсь отправить форму, у меня появляется страница с blah-blah/employee/add_employee/add/add/ URL, которая неверна. Как я могу отобразить страницу с blah-blah/employee/add_employee/ URL и показать все сообщения об ошибках?

1 Ответ

2 голосов
/ 27 октября 2019

Вероятно, это связано с тем, что вы записали URL-адрес относительно в теге <form> шаблона sections/add_employee.html. Таким образом, шаблон содержит что-то вроде:

<form method="post" <b>action="add/"</b>>
    ...
</form>

Вы можете использовать URL с тегом шаблона {% url &hellip; %} [Django-doc] :

<form method="post" <b>action="{% url 'add-employee-action' %}"</b>>
    ...
</form>

Более того, обычно используется один и тот же путь для обработки запросов GET и POST. Так что на самом деле вы можете просто удалить путь 'add-employee'.

...