【问题标题】:Dynamic TEMPLATE_DIRS动态 TEMPLATE_DIRS
【发布时间】:2015-12-17 06:45:59
【问题描述】:

我希望能够拥有模板所在的动态目录。让我解释一下我的意思。我有一个应用程序system,它有这样一个文件结构:

\proj
    __init__.py
    settings.py
    urls.py
    ...
\system
    __init__.py
    models.py
    views.py
    urls.py
    \modules
        \module_1
            __init__.py
            models.py
            views.py
            urls.py
            \templates     ## Attention
                one.html
                two.html
        \module_2
            __init__.py
            modules.py
            \templates    ##
                three.html
                four.html
        ...
        \module_N
            ...

如您所见,有一个modules 文件夹,其中包含“原子”模块,原子在某种意义上说它们具有所有必要的文件,包括一个地方的模板。所以module_1 有一个带有模板的模板文件夹,module_2 有一个模板文件夹,所有其他模块都有自己的模板文件夹。我想要的是能够在我的settings.py 文件中引用这些模板文件夹,这样当我将一个全新的模块上传到模块文件夹时,我就不必更改这个settings.py 文件。所以我的问题是,如何动态构建TEMPLATE_DIRS 变量:

TEMPLATE_DIRS = (
    ## how to implement this???
)

编辑

我正在考虑另一种方法。首先,将我的模块转换为动态应用程序,例如this

MODULES_DIR = 'system/modules'

for item in os.listdir(MODULES_DIR):
    if os.path.isdir(os.path.join(MODULES_DIR, item)):
        app_name = 'system.modules.%s' % item
        INSTALLED_APPS += (app_name, )

然后做一些事情让 Django 在所有应用程序的文件夹中查找模板。但我不确定它是否会起作用以及我该如何完成这项任务。

【问题讨论】:

    标签: python django


    【解决方案1】:

    这只是特定于应用程序的模板,模板设置字典中的APP_DIRS flag 已经提供了这些模板。应该不需要任何其他配置。

    【讨论】:

    • 我动态构建 INSTALLED_APPS 的方法会奏效吗?
    • 我怀疑这将取决于该代码何时运行;您可能会在启动顺序方面遇到困难。我必须说,虽然我不明白你为什么要这样做;如果您要向项目添加代码,只需将该代码的应用名称添加到 INSTALLED_APPS。
    • 我不确定我是否正确理解文档。如果我错了,请您纠正我吗?据我所知,我应该将所有模块都列在 INSTALLED_APPS 中(如果可能,静态或动态)。然后让 APP_DIRS = True。所有这些都应该在 settings.py 文件中完成。
    • " 我必须说,虽然我不明白你为什么这样做;" 这个想法是让用户能够从远程服务器上传新模块,而无需更改任何代码。
    猜你喜欢
    • 1970-01-01
    • 2012-06-03
    • 2015-06-30
    • 1970-01-01
    • 2013-12-19
    • 2017-11-18
    • 2012-01-02
    • 1970-01-01
    • 2014-08-12
    相关资源
    最近更新 更多