You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django自定义is_ajax后仍报WSGIRequest无该属性错误求助

报错原因

Django 3.1及以上版本已经移除了内置的request.is_ajax()方法,你虽然自定义了同名的独立判断函数,但调用时写成了request.is_ajax(),本质是尝试访问WSGIRequest请求对象的内置属性/方法,对象本身没有这个成员,因此抛出AttributeError。

修复方案
  • 修正调用方式:不要把自定义函数作为request对象的方法调用,直接传入request参数调用独立函数即可。
    首先确认自定义的is_ajax函数定义在所有调用它的视图函数之前,然后把第48行的错误写法if request.is_ajax():替换为正确写法:
    if is_ajax(request):
    
    你写的判断逻辑本身是正确的,标准Ajax判断逻辑就是校验请求头中HTTP_X_REQUESTED_WITH的值是否为XMLHttpRequest,完整参考代码:
    # 工具函数定义放在调用位置之前
    def is_ajax(request):
        return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'
    
    def your_target_view(request):
        # 正确调用自定义函数
        if is_ajax(request):
            # 编写Ajax请求对应的返回逻辑
            return JsonResponse({"code": 0, "msg": "success"})
        # 普通请求的返回逻辑
        return render(request, "your_page.html")
    
  • 适配补充:如果使用axios等新版前端请求库,默认不会携带X-Requested-With请求头,会导致判断失效,需要在前端全局请求配置中添加该请求头,值设置为XMLHttpRequest即可。
  • 注意:如果想保留request.is_ajax()的调用习惯,可以通过猴子补丁给WSGIRequest类新增对应方法,但是这种方式侵入性较强,后续版本升级容易出现兼容问题,优先选择直接调用独立函数的方案。

内容的提问来源于stack exchange,提问作者deniz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 01:01:06