Python 如何根据应用程序中的模块在Django项目设置中设置变量?
我真的很喜欢django管道,但我希望在每个应用程序中设置我的资产。它更干净,不会弄乱settings.py。因此,在核心应用程序的u_init__u; py.py中,我有下面的代码Python 如何根据应用程序中的模块在Django项目设置中设置变量?,python,django,django-pipeline,Python,Django,Django Pipeline,我真的很喜欢django管道,但我希望在每个应用程序中设置我的资产。它更干净,不会弄乱settings.py。因此,在核心应用程序的u_init__u; py.py中,我有下面的代码 # __init__.py file from django.conf import settings from django.utils.importlib import import_module GLOBAL_PP_JS = {} GLOBAL_PP_CSS = {} for app in setti
# __init__.py file
from django.conf import settings
from django.utils.importlib import import_module
GLOBAL_PP_JS = {}
GLOBAL_PP_CSS = {}
for app in settings.INSTALLED_APPS:
try:
mod = import_module('%s.compressed' % app)
except:
continue
try:
GLOBAL_PP_JS.update(mod.PIPELINE_JS)
except:
pass
try:
GLOBAL_PP_CSS.update(mod.PIPELINE_CSS)
except:
pass
PIPELINE_JS = setattr(settings, 'PIPELINE_JS', GLOBAL_PP_JS)
PIPELINE_CSS = setattr(settings, 'PIPELINE_CSS', GLOBAL_PP_CSS)
它在每个应用程序中搜索压缩的.py模块
# compressed.py file
PIPELINE_JS = {
'js_group': {
'source_filenames': (
'js/base.js',
),
'output_filename': 'js/group.js',
}
}
好吧,它不工作,因为设置有安全功能,以防止覆盖其变量
有人能告诉我一些Django模式或任何解决方法来让代码工作吗
我使用的是Django 1.7和Django Pipeline 1.4.3。Django设置仅在设置文件外受写保护。只要不创建循环导入,就可以根据已安装应用程序中的压缩模块动态设置PIPELINE_JS和PIPELINE_CSS。显然,顺序很重要,在加载js和css文件之前,安装的应用程序需要完整,或者至少包括所有具有压缩模块的应用程序 另一种方法是使用带有uuu get_uuu和uuu set_uuu方法的描述符对象作为管道JS和管道CSS设置,延迟加载基于应用程序的设置。这将确保所有已安装的应用程序都可用