我在我的settings.py中声明的一个应用程序中有一个context_processors.py文件,它可以工作。但是,由于context_processors.py文件的数据对所有项目都是通用的,所以我想在项目的根目录中声明它,但文件无法识别……
当前项目的架构
- myproject
- myproject
- myapp
- context_processors.py在settings.py中声明如下:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR,'registration/templates'),
os.path.join(BASE_DIR,'templates'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'myapp.context_processors.data_context_processor', <********************
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]预期项目的架构
- myproject
- myproject
- context_processors.py
- myapp我应该如何在settings.py中声明我的context_processors.py文件?我尝试使用os.path.join(BASE_DIR,'context_processors.data_context_processor'),但不起作用……
发布于 2020-04-21 14:47:50
使用python模块/包点符号
'context_processors': [
'myproject.context_processors.data_context_processor',
...
]发布于 2020-04-21 15:12:14
通常,当使用django设置来引用软件组件(模块、类或可调用的)时,期望的不是文件系统路径,而是python限定路径(参见点符号,类似于引用对象的属性或方法的方式)。然后将使用与任何Python模块相同的解析规则动态导入(您可能希望在Python文档中阅读此内容)。
因为项目的根路径总是被认为是你的sys.path ( python搜索模块和包的目录列表)中的第一个,如果你想引用一个位于项目根目录顶层的模块或包,你只需直接使用模块或包的名称-就像你在设置INSTALLED_APPS中所做的那样来引用你的应用程序。在你的例子中,my_project看起来就是‘项目文件夹’(包含你的设置,根url conf等等),从技术上讲,它是你项目根顶层的一个包,所以预期的python限定名是"my_project.context_processors.data_context_processor"。
https://stackoverflow.com/questions/61337437
复制相似问题