#javascript #django
#javascript #django
Вопрос:
У меня есть кнопка html. когда я нажимаю ее, я хочу запустить функцию JS, которая вызовет функцию django. Веб-сайт загружается, но когда я нажимаю кнопку, ничего не происходит. кто-нибудь может увидеть, где я ошибаюсь?
HTML:
<input type='button' value='run function' onclick='runScript()'>
URLs.py:
path('printing_function/', views.printing_function, name='printing_function')
views.py:
def printing_function(request):
print("hello")
return HttpResponse()
Main.js:
function runScript() {
$.ajax({
url: 'print_function/',
success: function(data) {
}
});
}
Комментарии:
1. Для этого может потребоваться больше деталей отладки. Каков ответ на ваш запрос ajax?
2. В вашем urls.py , URL
printing_function/
-адрес, тогда как в вашей функции ajax URL-print_function/
адрес. URL-адреса не совпадают . Кроме того, в ваших HTML-шаблонах начинайте URL-адреса с косой черты (/
), иначе у вас возникнут неожиданные проблемы. Подробнее читайте об относительных и абсолютных путях.
Ответ №1:
Обычно я использую что-то вроде этого :
function runScript() {
// Add a log just to see if the function works
console.log('button clicked!')
$.get("{% url 'printing_function' %}")
.done(function(response) {
console.log(response)
)
.fail(function(error) {
console.log(error)
)
}
Обратите внимание, что это {% url ... %}
можно использовать, только если вы находитесь в шаблоне HTML. Если вы изолировали свой JS в другом файле, вам необходимо заменить его точным URL: /printing_function/
(как указано @xyres)
И, на мой взгляд, я предпочитаю возвращать JsonResponse
:
def printing_function(request):
print("hello")
return JsonResponse({'success': True})