Как правильно настроить 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 файле

Вернуться на верх