Не удалось разобрать остаток: '${profiles['user']}' из '${profiles['user']}

    const data = '{{ search_user }}'
    const rdata = JSON.parse(data.replace(/"/g, '"'))
    const input = document.getElementById('user-input_products')

    let filteredArr = []

    input.addEventListener('keyup', (e)=>{
        box.innerHTML = ""
        filterMax = (fn, c) => x => c && fn(x) && c--
        filter = profiles=> profiles['full_name'].includes(e.target.value)
        max = 30
        filteredArr = rdata.filter(filterMax(filter, max))
        if (filteredArr.length > 0) {
            filteredArr.map(profiles=>{
                box.innerHTML += `<li><a href="{% url 'user_num' ${profiles['user']} %}">${profiles['full_name']}</a></li>`
            })
        } else {
            box.innerHTML = "No result found"
        }
    })

А когда я хочу передать id в django url внутри innerHTML, это дает мне эту ошибку:

Could not parse the remainder: '${profiles["user"]}' from '${profiles["user"]}'

Как я могу это исправить?

rdata:
[
  {
    "user": 28,
    "full_name": "John"
  },
  {
    "user": 35,
    "full_name": "Robert"
  },
  {
    "user": 37,
    "full_name": "Mary"
  },
  {
    "user": 38,
    "full_name": "Jennifer"
  },
]

Вы не можете смешивать код Python на стороне сервера с кодом javascript на стороне фронтенда подобным образом. Django Templates воспринимает ${profiles['user']} как простую строку. Чтобы исправить это, вы можете хранить префикс пути в переменной JS и объединить пользовательские ссылки с литералом шаблона JS:

const path_prefix = "{% url 'user_num' %}"
const data = '{{ search_user }}'
const rdata = JSON.parse(data.replace(/&quot;/g, '"'))
const input = document.getElementById('user-input_products')

let filteredArr = []

input.addEventListener('keyup', (e)=>{
    box.innerHTML = ""
    filterMax = (fn, c) => x => c && fn(x) && c--
    filter = profiles=> profiles['full_name'].includes(e.target.value)
    max = 30
    filteredArr = rdata.filter(filterMax(filter, max))
    if (filteredArr.length > 0) {
        filteredArr.map(profiles=>{
            box.innerHTML += `<li><a href="${path_prefix}${profiles['user']}">${profiles['full_name']}</a></li>`
        })
    } else {
        box.innerHTML = "No result found"
    }
})

Если путь для функции представления user_num равен user_num/, то ${path_prefix}${profiles['user']} выдаст, например, user_num/28. Возможно, вам придется создать новое определение URL, если функция user_num требует аргумента, или вы можете просто вставить фактический путь напрямую, например: user_num/${profiles['user']}.

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