使用动态表单集和 Django Formtools 时的 Django CSRF 问题
Django CSRF Issues While Using Dynamic Formsets and Django Formtools
我正在使用 Django formttools 创建一个多步骤向导。在其中一种形式中,我有一个问题选项,用户需要根据需要添加尽可能多的问题。我已经通过 Django Dynamic Formset 实现了动态表单集,但是尽管我的模板中有 {% csrf_token %},但我仍然遇到 CSRF 问题。这是我的模板:
{% block content %}
<p>Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }}</p>
<form action="" method="post" enctype="multipart/form-data" id="job-question">{% csrf_token %}
<table>
{{ wizard.management_form }}
{% if wizard.form.forms %}
{{ wizard.form.management_form }}
{% for form in wizard.form.forms %}
{{ form }}
{% endfor %}
{% else %}
{{ wizard.form }}
{% endif %}
</table>
{% if wizard.steps.prev %}
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.first }}">{% trans "first step" %}</button>
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">{% trans "prev step" %}</button>
{% endif %}
<input type="submit" value="{% trans "submit" %}"/>
</form>
<script type="text/javascript" src="{% static 'js/jquery-min.3.4.1..js' %}"></script>
<script type="text/javascript" src="{% static 'js/jquery.formset.js' %}"></script>
<script type="text/javascript">
$(function() {
$('#job-question').formset();
})
</script>
{% endblock %}
我设法通过将每个表单及其 ID 传递给动态表单集 JS 函数来处理这个问题。这样验证就完成了。
我正在使用 Django formttools 创建一个多步骤向导。在其中一种形式中,我有一个问题选项,用户需要根据需要添加尽可能多的问题。我已经通过 Django Dynamic Formset 实现了动态表单集,但是尽管我的模板中有 {% csrf_token %},但我仍然遇到 CSRF 问题。这是我的模板:
{% block content %}
<p>Step {{ wizard.steps.step1 }} of {{ wizard.steps.count }}</p>
<form action="" method="post" enctype="multipart/form-data" id="job-question">{% csrf_token %}
<table>
{{ wizard.management_form }}
{% if wizard.form.forms %}
{{ wizard.form.management_form }}
{% for form in wizard.form.forms %}
{{ form }}
{% endfor %}
{% else %}
{{ wizard.form }}
{% endif %}
</table>
{% if wizard.steps.prev %}
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.first }}">{% trans "first step" %}</button>
<button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">{% trans "prev step" %}</button>
{% endif %}
<input type="submit" value="{% trans "submit" %}"/>
</form>
<script type="text/javascript" src="{% static 'js/jquery-min.3.4.1..js' %}"></script>
<script type="text/javascript" src="{% static 'js/jquery.formset.js' %}"></script>
<script type="text/javascript">
$(function() {
$('#job-question').formset();
})
</script>
{% endblock %}
我设法通过将每个表单及其 ID 传递给动态表单集 JS 函数来处理这个问题。这样验证就完成了。