【Django】Django4.1.2使用xadmin避坑指南(二)

news2024/11/25 16:56:56

上一篇【Django】Django4.1.2使用xadmin避坑指南调完后,还是继续有问题,没事,咱们继续,必须啃下硬骨头~

文章目录

    • 环境
    • 问题一:if not ContentType._meta.installed:这一句报错:AttributeError: 'Options' object has no attribute 'installed'
    • 问题二:TypeError: never_cache didn't receive an HttpRequest. If you are decorating a classmethod, be sure to use @method_decorator.
    • 问题三: return bool(self.request.is_ajax() or self.request.GET.get('_ajax'))报错:AttributeError: 'WSGIRequest' object has no attribute 'is_ajax'
    • 问题四:except models.FieldDoesNotExist:报错:AttributeError: module 'django.db.models' has no attribute 'FieldDoesNotExist'
    • 问题五:django.template.exceptions.TemplateSyntaxError: Invalid block tag on line 2: 'ifequal'. Did you forget to register or load this tag?
    • 问题六:name 'smart_text' is not defined

环境

win10 python3.9.0 django4.1.2

问题一:if not ContentType._meta.installed:这一句报错:AttributeError: ‘Options’ object has no attribute ‘installed’

我还研究了很久啥原因,看了看源码,后来直接看这段代码的意思,就是让把django.contrib.contenttypes安装到INSTALLED_APPS中,我检查了一下,安装了呀。
解决办法:直接注释掉,当然这样就没有检查安装django.contrib.contenttypes的过程了。

# if not ContentType._meta.installed:
#     raise ImproperlyConfigured("Put 'django.contrib.contenttypes' in "
#                                "your INSTALLED_APPS setting in order to use the admin application.")

看源码,Django 2.0.x的源码中Options是有这个属性方法的,3.2.x也有,4.0.x也有。

/django/db/models/options.py

@property
def installed(self):
    return self.app_config is not None

在Django的release note中没有看到提及,看GitHub的代码历史,是被移除了,说没用。

问题二:TypeError: never_cache didn’t receive an HttpRequest. If you are decorating a classmethod, be sure to use @method_decorator.

这个exception好像还没解决,点击这个链接反馈,加速fix

我是注释掉了:

        # if not hasattr(request, "META"):
        #     raise TypeError(
        #         "never_cache didn't receive an HttpRequest. If you are "
        #         "decorating a classmethod, be sure to use @method_decorator."
        #     )

问题三: return bool(self.request.is_ajax() or self.request.GET.get(‘_ajax’))报错:AttributeError: ‘WSGIRequest’ object has no attribute ‘is_ajax’

这个Django 3.1的release note有提到

The HttpRequest.is_ajax() method is deprecated as it relied on a jQuery-specific way of signifying AJAX calls, while current usage tends to use the JavaScript Fetch API. Depending on your use case, you can either write your own AJAX detection method, or use the new HttpRequest.accepts() method if your code depends on the client Accept HTTP header.
If you are writing your own AJAX detection method, request.is_ajax() can be reproduced exactly as request.headers.get(‘x-requested-with’) == ‘XMLHttpRequest’.

可以像这样用,创建一个自定义函数,进行检查:

def is_ajax(request):
    return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'

网上的例子:

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)

解决方法:

        # return bool(self.request.is_ajax() or self.request.GET.get('_ajax'))
        return bool(self.request.headers.get('x-requested-with') == 'XMLHttpRequest' or self.request.GET.get('_ajax'))

当我解决完这个问题的时候,真心建议别用Django4尝试搭配xadmin了。😢想完全适配没那么容易。

问题四:except models.FieldDoesNotExist:报错:AttributeError: module ‘django.db.models’ has no attribute ‘FieldDoesNotExist’

解决方法:

最上面导包的代码
from django.core.exceptions import PermissionDenied, ObjectDoesNotExist
改成
from django.core.exceptions import PermissionDenied, ObjectDoesNotExist, FieldDoesNotExist
报错的那个位置改成
# except models.FieldDoesNotExist:
 except FieldDoesNotExist:

问题五:django.template.exceptions.TemplateSyntaxError: Invalid block tag on line 2: ‘ifequal’. Did you forget to register or load this tag?

解决方法:找到报错的模板文件,我报错的是项目根路径/venv/Lib/site-packages/xadmin/templates/xadmin/includes/pagination.html

把ifequal a b 改成 if a == b
把endifequal 改成 endif

问题六:name ‘smart_text’ is not defined

在使用过程中还会有多处报这个错误,或者类似的,因为新的Django没有这个方法了,改成了force_strsmart_str。就照着下面对比着改,缺哪个改哪个。
解决方法:

from django.utils.encoding import force_str, smart_str
force_text = force_str
smart_text = smart_str

在这里插入图片描述
可以用了!

我把改好的xadmin源码上传了一份到GitHub上,希望能够给个star⭐️!

Django4.1.2-xadmin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27847.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《深度学习进阶 自然语言处理》第八章:Attention介绍

文章目录8.1 Attention结构8.1.1 seq2seq存在的问题8.1.2 编码器的改进8.1.3 解码器的改进8.2 Attention的应用8.3 总结之前文章链接: 开篇介绍:《深度学习进阶 自然语言处理》书籍介绍 第一章:《深度学习进阶 自然语言处理》第一章&#xf…

SSH连接WSL2踩坑记录与增加端口转换规则,实现外网与WSL2的连接

SSH连接WSL2踩坑记录 文章目录SSH连接WSL2踩坑记录1. 在WSL里的操作2. ssh连接3. 可能出现的错误4. 再配置端口转发到WSL1. 在WSL里的操作 1.1 重装openssh-server sudo remove openssh-server # 如果已经安装了,建设先卸载 sudo apt install openssh-server…

Ansys Lumerical | 行波 Mach-Zehnder 调制器仿真分析

前言 本示例描述了行波 Mach-Zehnder 调制器的完整多物理场(电气、光学、射频)仿真,最后在INTERCONNECT中进行了紧凑模型电路仿真。计算了相对相移、光学传输、传输线带宽和眼图等关键结果。 综述 此示例中5毫米长的Si波导由5毫米长的Al共面…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.24 SpringBoot 整合 RabbitMQ(topic 模式)

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.24 SpringBoot 整合 RabbitMQ(topic 模式)5.24.1 …

FL Studio2023水果编曲软件最新版安装教程

FL Studio中文版是知名的音乐制作软件,让你的计算机就像是全功能的录音室,软件包含13种虚拟音源,可同时录制64轨音频轨,FL Studio中文版拥有的漂亮的大混音盘,先进的创作工具,让你的音乐突破想象力的限制&a…

智能化油田建设规划

一、数字化油田-技术现状 数字化油田实现了设备的远程生产过程监控,使井场实现无人值守。所以目前的设备运行维护管理系统只能实现数据统计管理,并不能实现设备状态监控及远程维护及故障诊断。 1、数字化油田— 存在的问题 缺少设备状态在线监测系统&a…

第三章. 业务功能开发--用户登录安全退出

第三章. 业务功能开发--用户登录安全退出 1. 用户登录 需求: 用户在登录页面,输入用户名和密码,点击"登录"按钮或者回车,完成用户登录的功能.*用户名和密码不能为空*用户名或者密码错误,用户已过期,用户状态被锁定,ip受限 都不能登录成功*登录成功之后,所…

Android Jetpack之Lifecycle的使用及源码分析

Lifecycle生命周期感知型组件可执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。这些组件有助于您编写出更有条理且往往更精简的代码,此类代码更易于维护。 尤其是在Activity和Fragment在已经默认支持LifeCycle的情…

【第五部分 | JS WebAPI】3:DOM 节点操作

目录 | 节点操作 1-1 概述 2-1 获取父节点 3-1 获取子节点(获取所有子对象 不推荐) 3-2 获取子节点(获取所有子【元素节点】) 3-3 获取首尾子节点 4-1 获取兄弟节点 5-1 动态创建、添加节点 5-2 案例:评论区 …

性能测试_JMeter_connection timed out :connect

jmeter报错:failed:connection timed out :connect/java.net.BindException: Address already in use: connect java.net.BindException: Address already in use: connectat java.net.DualStackPlainSocketImpl.connect0(Native Method)at java.net.DualStackPlainSocketImpl…

Linux系统上安装软件

安装jdk,安装tomcat,安装Mysql 四种安装方式: 安装jdk 1.去这个网站上下载linux版本的jdk Java Archive Downloads - Java SE 8 2.在虚拟机中的服务器终端中输入ifconfig(注意不是ipconfig,而是ifconfig…

智慧机场解决方案-最新全套文件

智慧机场解决方案-最新全套文件一、建设背景二、建设思路三、建设方案四、获取 - 智慧机场全套最新解决方案合集一、建设背景 中国处在机场持续大规模建设过程中,政府也有意愿建设机场作为城市名片,经济持续增长会带来机场的持续建设;我国机…

螺旋模型的优点与缺点

螺旋模型: 特点: 螺旋模型在“瀑布模型”的每一个开发阶段前引入一个非常严格的风险识别、风险分析和风险控制,它把软件项目分解成一个个小项目。每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定 螺旋模型强…

Copilot:AI自动写代码,人工智能究竟还能取代什么?

Copilot:AI自动写代码,人工智能究竟还能取代什么? 前言 在AI绘画掀起一阵热潮之后,AI写代码又逐渐进入了我们的视野,似乎这一步我们还没想到就迅速到来了,难道说AI在取代画家之后,还要取代程序…

引擎入门 | Unity UI简介–第1部分(7)

本期我们继续为大家进行Unity UI简介(第一部分)的后续教程 本篇内容 14.放置标题图像 15.添加开始按钮 16.定位按钮 文章末尾可免费获取教程源代码 本篇Unity UI简介(第一部分)篇幅较长,分为十篇,本篇…

sqli-labs/Less-48

欢迎界面还是以sort为注入参数 接下来进行注入类型的判断 首先输入一下内容 sortrand() 多尝试几次 发现界面会发生变化 所以这一关属于数字型注入 然后我们选择使用报错注入 尝试输入一下内容 sortupdatexml(1,if(11,concat(0x7e,database(),0x7e),1),1)-- 回显如下 呦…

网络层 408真题 大题详解

1、【2009】 第一问有两种分配可能性,要想到位 记住🚩 路由器到互联网的路由相当于默认路由0/0 即目的地址0.0.0.0 子网掩码0.0.0.0 2、【2015】 注意🚩DHCP服务器不能转发信息 要观察到本图网络拓扑是同一个网络,在同一个网络中…

Linux系统man帮助一文通-尚文网络xUP楠哥

~~全文共1453字,阅读需约5分钟。 进Q群11372462,领取专属报名福利,包含云计算学习路线图代表性实战训练大厂云计算面试题资料! Linux帮助手册的常见章节 man是Manual的缩写,用来查看系统中命令和配置的帮助信息。Linux本地系统上…

Java#21(抽象与接口)

目录 一.抽象方法和抽象类 1.抽象方法: 2.抽象类: 3.注意: 二.接口 1.接口的定义 2.注意 3.接口中成员的特点 三.接口中的方法 1.JDK7以前: 接口中只能定义抽象方法2.JDK8: 接口中可以定义有方法体的方法(默认、静态) 3.JDK9: 接口中可以定义私有方法 一.抽象方法和…

【Call for papers】DSN-2023(CCF-B/截稿日期: 2022年12月7日)

文章目录1.会议信息2.时间节点3.论文主题On behalf of the Organizing Committee, we extend you a warm welcome to the 53rd Annual IEEE/IFIP International Conference on Dependable Systems and Networks (DSN 2023), organized by the University of Coimbra, Portugal.…