表单验证失败后如何呈现模板?
How to render template after failed form validation?
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>
通过 <a>
元素提交已经过测试,在 jQuery 脚本中运行良好。
问题是在提交无效表单后我有一个页面 blah-blah/employee/add_employee/add/
URL。如果我再次尝试提交表单,我会看到一个包含 blah-blah/employee/add_employee/add/add/
URL 的页面,这是不正确的。如何使用 blah-blah/employee/add_employee/
URL 呈现页面并显示所有错误消息?
这可能是因为您在 sections/add_employee.html
模板的 <form>
标签中写了 relative URL。因此,该模板包含如下内容:
<form method="post" <b>action="add/"</b>>
...
</form>
您可以将 URL 与 {% url … %}
template tag [Django-doc] 一起使用:
<form method="post" <b>action="{% url 'add-employee-action' %}"</b>>
...
</form>
此外,通常使用相同的路径来处理GET和POST请求。所以实际上你可以简单地删除 'add-employee'
路径。
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>
通过 <a>
元素提交已经过测试,在 jQuery 脚本中运行良好。
问题是在提交无效表单后我有一个页面 blah-blah/employee/add_employee/add/
URL。如果我再次尝试提交表单,我会看到一个包含 blah-blah/employee/add_employee/add/add/
URL 的页面,这是不正确的。如何使用 blah-blah/employee/add_employee/
URL 呈现页面并显示所有错误消息?
这可能是因为您在 sections/add_employee.html
模板的 <form>
标签中写了 relative URL。因此,该模板包含如下内容:
<form method="post" <b>action="add/"</b>>
...
</form>
您可以将 URL 与 {% url … %}
template tag [Django-doc] 一起使用:
<form method="post" <b>action="{% url 'add-employee-action' %}"</b>>
...
</form>
此外,通常使用相同的路径来处理GET和POST请求。所以实际上你可以简单地删除 'add-employee'
路径。