Django4集成Highcharts报错:AttributeError: 'WSGIRequest'无is_ajax属性
问题修复方案
错误原因
Django 4.0及以上版本已移除request.is_ajax()方法,但你使用的HighChartsBarView底层代码仍在调用该方法,因此抛出AttributeError。
修复步骤
1. 替换Ajax判断逻辑(无需修改第三方库源码)
创建自定义Mixin实现Django 4+的Ajax判断逻辑,让视图类优先使用该方法:
import random from django.shortcuts import render from highcharts.views import HighChartsBarView # 新增Ajax判断Mixin class AjaxRequestMixin: def is_ajax(self): return self.request.headers.get('X-Requested-With') == 'XMLHttpRequest' class BarView(AjaxRequestMixin, HighChartsBarView): title = 'Example Bar Chart' subtitle = 'my subtitle' categories = ['Orange', 'Bananas', 'Apples'] chart_type = '' chart = {'zoomType': 'xy'} tooltip = {'shared': 'true'} legend = {'layout': 'horizontal', 'align': 'left', 'floating': 'true', 'verticalAlign': 'top', 'y': -10, 'borderColor': '#e3e3e3'} @property def series(self): result = [] # 修复缩进错误:确保每个名称都生成对应的数据列表 for name in ('Joe', 'Jack', 'William', 'Averell'): data = [] for x in range(len(self.categories)): data.append(random.randint(0, 10)) result.append({'name': name, "data": data}) return result
2. 修复模板静态文件标签
Django 3.0+已弃用staticfiles标签,将index.html中的:
{% load staticfiles %}
替换为:
{% load static %}
额外说明
- 若你有权限修改
highcharts.views源码,可直接找到调用request.is_ajax()的位置,替换为request.headers.get('X-Requested-With') == 'XMLHttpRequest',所有继承该类的视图将自动适配。 - 原
series方法存在缩进错误,仅会为最后一个名称生成数据,已在上述代码中修复。
内容的提问来源于stack exchange,提问作者bushmrz
相关产品推荐
相关产品推荐

