Как открыть определенный элемент аккордеона в Django с помощью Bootstrap?
У меня есть приложение Django со страницей, которая содержит Bootstrap Accordion.
У меня есть форма в третьем элементе аккордеона. При отправке формы я хочу, чтобы страница обновлялась до того же элемента аккордеона - там у меня есть сообщения обратной связи, которые я хочу отобразить пользователю.
При нажатии кнопки Submit страница обновляется до элемента по умолчанию - в моем случае это первый элемент аккордеона.
Я пробовал добавлять /#collapseThree к url, но страница обновляется до вида по умолчанию.
Спасибо, Эндрю
Используйте следующую процедуру.
- Присвойте своим элементам уникальные идентификаторы.
Нравится
<div id="tab1"></div>
<div id="tab2"></div>
<div id="tab3"></div>
<div id="tab4"></div>
- Присвойте вашим урлам id вкладок, на которых нужно сосредоточиться
url_path#tab2
- Используйте js для фокусировки вкладки с id из url
document.getElementById(window.location.hash).click();
//or
document.getElementById(window.location.hash).focus();
Для всех, кто в будущем столкнется с этим, вот мое решение:
Оригинальная проблема: У меня есть шаблон Django, который содержит Bootstrap Accordion, с тремя элементами. В каждом пункте у меня есть форма. Когда страница обновляется при любом сабмите, она всегда открывается на первый элемент аккордеона. Я хочу, чтобы страница открывалась на том элементе аккордеона, который вызвал событие 'submit' (это связано с тем, что я делаю некоторую валидацию формы на стороне сервера и хочу выдавать сообщения пользователю, когда он делает неправильный выбор).
Решение: Я смог добиться этого, добавив параметр к url моего шаблона в urls.py ('/str:active_accordion/'). Затем я позаботился о том, чтобы вызвать действие формы на каждой из трех форм:
'action="{% url 'app:view' 'collapse???' %}"'
... где: 'collapse???' в каждом случае соответствует id элемента аккордеона, содержащего соответствующую форму. Пример 'collapseThree'
Наконец, я добавил в свой шаблон следующий скрипт, который считывает url и "показывает" соответствующий элемент Accordion:
<script>
$(document).ready(function() {
// Check if the URL contains the open_accordion parameter
var urlParams = new URLSearchParams(window.location.search);
if (window.location.href.indexOf("collapseOne") > -1) {$('#collapseOne').collapse('show');}
if (window.location.href.indexOf("collapseTwo") > -1) {$('#collapseTwo').collapse('show');}
if (window.location.href.indexOf("collapseThree") > -1) {$('#collapseThree').collapse('show');}
});
</script>
Надеюсь, это поможет кому-нибудь еще. Andrew