Estoy tratando de aprender ajax en django, pero cuando ejecuto esta prueba simple, aparece este error y no puedo encontrar el motivo, mi versión de django es 4.0.
AttributeError: 'WSGIRequest' object has no attribute 'is_ajax'ver.py
from django.shortcuts import render, HttpResponse def home(request): return render(request,'myapp/index.html') def ajax_test(request): if request.is_ajax(): message = "This is ajax" else: message = "Not ajax" return HttpResponse(message)urls.py
urlpatterns = [ path('',views.home,name='home'), path('ajax_test/', views.ajax_test, name='ajax_test') ]índice.html
<button id="btn">click me!</button> <script> $("#btn").click(function () { $.ajax({ type: "GET", url: "{% url 'ajax_test' %}", success: function () { console.log("done"); }, error: function () { console.log("error"); }, }); }); </script>De las notas de la versión 3.1
El método
HttpRequest.is_ajax()está en desuso porque se basaba en una forma específica de jQuery de significar las llamadas AJAX, mientras que el uso actual tiende a usar la API de recuperación de JavaScript. Según su caso de uso, puede escribir su propio método de detección de AJAX o usar el nuevo métodoHttpRequest.accepts()si su código depende del encabezado HTTP Accept del cliente.
Aunque ha quedado en desuso, puede crear una función personalizada para verificar el tipo de solicitud como,
def is_ajax(request): return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'y usar en cualquier lugar de su vista como,
from django.shortcuts import HttpResponse def is_ajax(request): return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest' def ajax_test(request): if is_ajax(request=request) : message = "This is ajax" else: message = "Not ajax" return HttpResponse(message)