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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:50:30