Ajax в Django создает дубликаты элементов
У меня есть форма, которая при отправке создает график с помощью Plotly. Я пытаюсь использовать Ajax
для отправки формы без обновления страницы. Хотя форма успешно отправляется, div формы дублируется на экране. Я не знаю, как решить эту проблему. Я использую веб-фреймворк Django. Вот мой код
шаблон
<form action="{% url 'home' %}" method='post' id='year-form'>
{% csrf_token %}
<select class="form-select form-select-lg mb-3 dropdown-btn" aria-label="Default select example"
name="year">
<option selected>Select Year</option>
<option value="2017">2017</option>
<option value="2018">2018</option>
<option value="2019">2019</option>
<option value="2020">2020</option>
</select>
<div class="d-grid gap-2">
<button class="btn btn-primary btn-lg" type="submit">Button</button>
</div>
</form>
<div id="message"></div>
<div class="graph center" id='graph'>
{% if graph %}
{{ graph.0|safe }}
{% else %}
<p>No graph was provided.</p>
{% endif %}
</div>
ajax jQuery
<script type="text/javascript">
var frm = $('#year-form');
frm.submit(function () {
$.ajax({
type: frm.attr('method'),
url: frm.attr('action'),
data: $(this).serialize(),
success: function (data) {
$("#graph").html(data);
},
error: function (data) {
$("#message").html("Something went wrong!");
}
});
return false;
});
</script>
Вот как выглядит страница перед отправкой формы
< Я думаю, что я не передаю правильные данные в success
части вызова Ajax.
Вам следует использовать другую конечную точку/вид для возврата шаблона графика. В данный момент вы получаете текущую страницу и загружаете ее снова, но на этот раз с графиком.
Ваш домашний шаблон должен быть:
<form action="{% url 'home' %}" method='post' id='year-form'>
{% csrf_token %}
<select class="form-select form-select-lg mb-3 dropdown-btn" aria-label="Default select example"
name="year">
<option selected>Select Year</option>
<option value="2017">2017</option>
<option value="2018">2018</option>
<option value="2019">2019</option>
<option value="2020">2020</option>
</select>
<div class="d-grid gap-2">
<button class="btn btn-primary btn-lg" type="submit">Button</button>
</div>
</form>
<div id="message"></div>
<div class="graph center" id='graph'>
<p>No graph was provided.</p>
</div>
Затем у вас есть второй шаблон, используемый в другом представлении, который вы получаете через ajax для получения графика, как например:
{% if graph %}
{{ graph.0|safe }}
{% else %}
<p>No graph was provided.</p>
{% endif %}