#javascript #python #ajax
#javascript #python #ajax
Вопрос:
Когда я нажимаю на кнопку, я пытаюсь активировать функцию, которая будет передавать данные в шаблон и открывать его. Вот функция нажатия кнопки:
function openForm () {
const amount = select.value;
$ .ajax ({
url: '/ create_order /',
type: 'get',
data: {'amount': amount},
dataType: "json",
xhrFields: {withCredentials: true},
success: function (data) {
if (data ['content']) {
$ ('body'). append (data ['content']);
console.log (data ['content'])
}
},
});
}
urls.py
url (r '^ create_order /', CreateOrder),
views.py
def CreateOrder (amount, request):
count = amount.GET.dict ()
content = mark_safe (render_to_string (
'form.html',
{
'amount': count ['amount'],
},
request))
Вопрос в параметре запроса. Мне это нужно в последней строке, поэтому мне нужно передать его в функцию CreateOrder . Но именно так возникает ошибка
TypeError at / create_order / ↵CreateOrder () missing 1 required positional argument: 'request'
Подскажите, как я могу передать запрос в openForm ()
функции или как это правильно сделать по-другому?
Ответ №1:
Проблема в urls.py
url (r '^ create_order /', CreateOrder),
Это вызовет CreateOrder (amount, request):
передачу вместо первого аргумента amount
request
запроса, который был сделан (не любое число)
вам нужно изменить свой urls.py чтобы вместо этого иметь дополнительный параметр amount
после /
from django.urls import path
path(r '^ create_order /<int:amount>', CreateOrder), #takes a number after the slash
Затем это приведет к правильному вызову ваших функций, передаваемых в качестве аргументов amount
и request
соответственно.
РЕДАКТИРОВАТЬ: первый аргумент должен быть request
not amount
, поэтому вы должны изменить его на
def CreateOrder (request,amount):
Комментарии:
1. Я делаю это
path ('create_order / <int: amount>', CreateOrder),
, но мой отладчик даже не переходит в CreateOrder, а responseText выглядит так<! DOCTYPE html> <html lang = "en"> <head> <meta http-equiv = "content-type" content = "text / html; charset = utf-8"> <title> Page not found at / create_order / </title>
2. Вам нужно выполнить Ajax
/create_order/<int:amount>/
прямо сейчас, в котором вы это делаете,create_order/
который не найден, также не уверен, является ли это проблемой, следите за своими пробелами.3. Я начинающий специалист, поэтому я очень извиняюсь за глупость) вот JavaScript ` $.ajax({ url: ‘/create_order/’, тип: ‘get’, данные: {‘amount’: amount}, Тип данных: «json», успех: функция (данные){ if (data[‘content’]) { $(‘body’).append(data[‘content’]); console.log(data[‘content’]) } }, }); }` вот URL
path('/create_order/<int:amount>', CreateOrder),
-адреса и все та же ошибка. Что не так, пожалуйста, помогите?4.
{ url: '/create_order/${amount}'
Это добавит сумму к текущему URL -адресу примерно такcreate_order/5000
, иdef CreateOrder (request,amount):
теперь будет иметьamount
в качестве аргумента. Но, насколько я понимаю, вам на самом деле не нужно добавлятьamount
к текущему URL -адресу, поэтому лучшей идеей было бы полностью удалить его из представления и URL-адреса и просто получить доступ к данным черезamount = request.GET.get("amount")
.5. Большое вам спасибо! И что делать с этой ошибкой, не подскажите пожалуйста? Какой HttpResponse будет правильным способом возврата?
ValueError at / create_order / ↵The view project.views.CreateOrder didn't return an HttpResponse object. It returned None instead.