Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据应用程序中的模块在Django项目设置中设置变量?_Python_Django_Django Pipeline - Fatal编程技术网

Python 如何根据应用程序中的模块在Django项目设置中设置变量?

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

我真的很喜欢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 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设置,延迟加载基于应用程序的设置。这将确保所有已安装的应用程序都可用