이전 페이지로 돌아가는 취소 button을 추가하고 싶습니다.내 코드는 다음과 같습니다.forms.py :
from flask_wtf import Form
from wtforms import StringField, HiddenField, SubmitField
from wtforms.validators import DataRequired, Length, ValidationError
def _required(form, field):
if not field.raw_data or not field.raw_data[0]:
raise ValidationError('Field is required')
class OrganisationForm(Form):
id = HiddenField('id', default="-1")
name = StringField('name', validators=[DataRequired()])
manager_name = StringField('manager_name')
address = StringField('address', validators=[DataRequired()])
city = StringField('city', validators=[DataRequired()])
postal_code = StringField('postal_code', validators=[DataRequired(), Length(max=16)])
province = StringField('province', validators=[Length(max=2, message="Can't exceed 2 characters")])
country = StringField('country', validators=[DataRequired()])
submit = SubmitField('Add')
cancel = SubmitField('Cancel')
및 템플릿 페이지 :
{% block content %}
<div class="content-section">
{{ utils.flashed_messages() }}
<div class="center">
{% if add_orgnisation %}
<h1>add an organisation</h1>
{% else %}
<h1>Edit an organisation</h1>
{% endif %}
<br/>
<br/>
{{ wtf.quick_form(form,novalidate=True) }}
</div>
</div>
{% endblock %}
보기, py
@orgs.route('/organisations/org_new')
@login_required
def org_new():
add_orgnisation = True
form = OrganisationForm()
return render_template("organisations/organisation_form.html", form=form, title="New Organisation", edit=False, add_orgnisation=add_orgnisation)
취소 button을 클릭 할 때 405 오류가 발생합니다. 메소드가 허용되지 않습니다.
내 실수는 어디에 있습니까? 취소를 클릭 할 때 이전 페이지로 돌아가려면 무엇을 추가해야합니까?
감사
취소 button을 클릭 할 때 405 오류가 발생합니다. 메소드가 허용되지 않습니다. 내 실수는 어디에 있습니까?
양식을 제출하면 데이터가 POST 요청으로 전송됩니다 (렌더링 된 양식 요소가 < form method = "post">
를 사용하기 때문). 그러나보기 함수는 기본적으로 GET 요청 만 허용하고 POST 요청을 수락하려면 다음과 같이 methods
매개 변수를 지정해야합니다.
@orgs.route('/organisations/org_new', methods=['GET', 'POST']) # <--
@login_required
def org_new():
# ...
취소를 클릭 할 때 이전 페이지로 돌아가려면 무엇을 추가해야합니까?
SubmitField
로 생성 된 모든 필드는 제출 button (< input type = "submit">
)으로 렌더링되므로 다음과 같은 경우 양식을 제출합니다. 클릭하세요.
취소 button을 클릭 할 때 이전 페이지로 돌아가려면 일반적으로 두 가지 메소드가 있습니다.
Ben의 답변 의 방법과 같습니다. 제출을 포착 한 다음 사용자를 이전 페이지로 리디렉션 할 수 있습니다.
@orgs.route('/organisations/org_new', methods=['GET', 'POST'])
@login_required
def org_new():
if request.method == 'POST':
if form.cancel.data: # if cancel button is clicked, the form.cancel.data will be True
return redirect(url_for('previous_page_view_name'))
# ...
추신 wtf.quick_form
에서 이미 novalidate = True
를 설정 했으므로 render_kw = { 'formnovalidate': True}
를 설정할 필요가 없습니다. 양식 class의 취소
button에 있습니다.
취소
필드 대신 < a >
button을 만듭니다.취소 button (class = "btn btn-secondary"
)으로 일반 < a >
요소를 만들고 href < / code> 매개 변수를 이전 페이지의 URL과 함께 사용합니다 (그러면 양식 class에
cancel
필드를 추가 할 필요가 없습니다). 이런 식으로 wtf.quick_form ()
을 사용할 수 없습니다. 대신 wtf.form_field ()
를 사용하여 각 필드를 수동으로 렌더링해야합니다.
<form method="post">
{{ wtf.form_field(form.id) }}
{{ wtf.form_field(form.name) }}
{{ wtf.form_field(form.manager_name) }}
{{ wtf.form_field(form.address) }}
...
{{ wtf.form_field(form.submit) }}
<a href="{{ url_for('previous_page_view_name') }}" class="btn btn-secondary">Cancel</a>
</form>
이것이 나를 위해 작동하는 방법입니다.
내 형태로 ...
btn_cancel = SubmitField(label='Cancel',
render_kw={'formnovalidate': True})
내 Python 코드 (귀하의 경우에는 views.py) ...
if request.method == 'POST':
if form.btn_cancel.data:
return redirect(url_for('data'))
마지막 편집 :보기 기능이 POST 요청을 수락하도록 허용하는 것에 대한 아래 Gray Li의 참고 사항도 중요합니다. 꼭 확인하세요.
출처 : https://stackoverflow.com/questions/63434291/add-a-cancel-button-in-flask-with-flask-wtf-wtforms