Как правильно настроить django url в javascript
Я видел много вопросов и ответов на эту тему, но решение, кажется, ускользает от меня.
common/urls.py
path('use-selected/<str:app_base>/<str:board_number>/', views.UseSelectedItem.as_view(), name='use-selected'),
Если я ввожу следующий код в свой шаблон, он работает правильно
<a id="use-selected" href="{% url 'use-selected' app_base='solo' board_number='4' %}"><button type="submit">Use selected</button></a>
если, с другой стороны, я присваиваю href в javascript
use_selected = document.getElementById('use-selected');
use_selected.href="{% url 'use-selected' app_base='solo' board_number='4' %}"
ссылка не работает. url запроса
http://127.0.0.1:8000/common/history/solo/%7B%25%20url%20'use-selected'%20app_base%3D'solo'%20board_number%3D'4'%20%25%7D
Я не понимаю, где возникают элементы common/history/solo. common и solo являются приложениями в моем проекте; common/history был url для перехода на эту страницу
В своем шаблоне вы можете попробовать что-то вроде этого:
<input type="hidden" id="use-selected" value="{% url 'use-selected' app_base='solo' board_number='4' %}">
В js-коде рефакторите ваши функции следующим образом:
$(document).ready(function () {
// ...
selectedBoard.forEach((radioButton) => {
radioButton.addEventListener('click', () => {
href = $("#use-selected").prop("value")
processBoardSelection(radioButton.value, href)
});
})
});
function processBoardSelection(board_number, href) {
// ...
}
Существует множество методов получения url.
Проблема в том, как предположил @Robin Zigmond в комментарии, что код создания url работает, если он находится в шаблоне, но не в отдельном файле. Я не знаю почему, потому что я использовал метод отдельных файлов в других приложениях.
Итак, шаблон теперь включает:
<a id="use-selected" href=""><button type="submit">Use selected</button></a>
...
<script>
function processBoardSelection(board_number) {
var use_selected_text = "{% url 'use-selected' app_base='app_base_value' board_number='board_number_value' %}"
var use_selected_href = document.getElementById('use-selected');
temp_text = use_selected_text.replace('board_number_value', board_number.toString());
href_text = temp_text.replace('app_base_value', app_base.toString());
use_selected_href.href = href_text;
}
</script>
Остальной код остается в отдельном js файле