Django ajax url не читается
У меня есть ajax файл, который вызывает url из urls.py, который получает json данные из views.py, но когда я запускаю сервер, он просто показывает Not Found:/dept-json/
Мне удалось заставить его работать, используя сниппет django {% url 'accounts:dept-json'%}
Однако я не хочу этого, поскольку мне нужно получить и передать переменную из dept-json data в другой ajax url, который является:
url:`/prog-data/${selectedDept}/`
Я читал здесь, что вы не можете передавать переменные в ajax как {% url 'accounts:prog-json' department%}
как мне это удается?
вот мой код:
main.js
//First ajax
$.ajax({
type: 'GET',
url: "/dept-json/",
// url: "{% url 'accounts:dept-json'%}",
success: function(response){
console.log(response)
},
error: function(error){
console.log(error)
}
})
//Second ajax
$.ajax({
type: 'GET',
url: `/prog-data/${selectedDept}/`,
success: function(response){
console.log(response)
},
error: function(error){
console.log(error)
}
})
urls.py
path('dept-json/', get_json_dept_data, name='dept-json'),
path('prog-json/<str:department>/', get_json_prog_data, name='prog-json'),
views.py
def get_json_dept_data(request):
qs_val = list(Department.objects.values())
return JsonResponse({'data':qs_val})
def get_json_prog_data(request, *args, **kwargs):
selected_department = kwargs.get('department')
obj_prog = list(Program.objects.filter(department__name=selected_department).values())
return JsonResponse({'data':obj_prog})
Вам нужно отправить данные в ajax-запросе следующим образом:
$.ajax({
url: "{% url 'accounts:prog-json'%}",
data: {
'department': selectedDept
},
success: function(response){
console.log(response)
},
error: function(error){
console.log(error)
}
})
И затем на вашем представлении вы можете получить доступ к этому аргументу из запроса:
def get_json_prog_data(request):
selected_department = request.GET.get('department')
obj_prog = list(Program.objects.filter(department__name=selected_department).values())
return JsonResponse({'data':obj_prog})
Я не думаю, что вам нужен параметр в вашем url, поэтому вы должны быть в состоянии просто удалить его, так как мы отправляем данные в ajax запросе.
path('prog-json/', get_json_prog_data, name='prog-json'),