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

如何在Django项目顶层目录创建decorators.py供多应用调用?

解决Django跨应用导入顶层装饰器的问题

核心原因

你的相对导入报错根源:

  • from ..decorators 试图跳出当前app的包层级,但项目根目录默认不是Python可识别的包(无__init__.py),因此触发跨顶层包的导入错误。
  • from .decorators 是在当前app目录下查找文件,自然找不到顶层的decorators.py。

快速解决办法(推荐绝对导入)

Django启动时会自动把manage.py所在的项目根目录加入Python的sys.path,直接用绝对导入即可:
在任意app的views.py中写入:

from decorators import student_required, teacher_required

确保你的项目结构符合以下形式(decorators.py与manage.py同级):

your_project/
    manage.py
    decorators.py
    myapp1/
        views.py
    myapp2/
        views.py

更规范的替代方案

如果想避免根目录存放零散模块,可将decorators.py移到项目配置包下(与settings.py同级):

your_project/
    manage.py
    your_project/
        settings.py
        decorators.py
    myapp1/
        views.py

此时导入方式改为:

from your_project.decorators import student_required, teacher_required

不推荐的临时应急方案

如果因特殊情况sys.path未包含项目根目录,可在views.py开头手动添加路径:

import sys
import os
# 将项目根目录加入sys.path
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from decorators import student_required, teacher_required

这种方式易引发路径冲突,仅建议临时测试使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:55:22