【问题标题】:Django: Plugable apps on runserverDjango:运行服务器上的可插入应用程序
【发布时间】:2013-11-07 02:20:26
【问题描述】:

我在 Django 中的文件夹结构如下:

./project_root
    ./app
       ./fixtures/
       ./static/
       ./templates/
       ./blog/
       ./settings.py
       ./urls.py
       ./views.py
       ./manage.py
       ./__init__.py 
    ./plugin
       ./code_editor
           ./static
           ./templates
           ./urls.py
           ./views.py
           ./__init__.py 
       ./code_viewer
           ./static
           ./templates
           ./urls.py
           ./views.py
           ./__init__.py 

那么我如何更改 settings.py 以动态加载插件(这意味着我不知道将在不同的服务器上安装多少插件。它应该在运行时动态检查并添加它。)on:

python manage.py runserver

我应该更改 ROOT_URLSCONF 吗?或 INSTALLED_APPS?谢谢你的回答。

【问题讨论】:

  • 您需要将应用程序/插件添加到INSTALLED_APPS,并且您需要在项目目录中的urls.py 中包含应用程序的url。
  • @void 是否可以动态制作?我现在可以手动了。添加到 ROOT_URLCONF 并给它几个值怎么样?

标签: python django web


【解决方案1】:

让您的settings.py 执行代码,通过扫描“插件”文件夹来确定存在哪些插件,并构建适当的 INSTALLED_APPS 变量。

# In settings.py    
for path in os.listdir(my_plugins_folder_location):
    if os.path.isdir(path):
        app_name = 'project_root.plugin.%s' % path
        if app_name not in INSTALLED_APPS:
            INSTALLED_APPS.append(app_name)

【讨论】:

  • 是问题还是建议?
  • 好的。我知道了。 STATICFILES_DIRS 呢?模板目录?网址?
  • 另一个奇怪的事情。当我将 print 'Hello' 放入 settings.py 文件时,它会打印两次。为什么会这样?
  • @antindexer 您可以通过这种方式设置任何设置,例如 TEMPLATE_DIRS 等。此答案stackoverflow.com/a/15605813/302243 可以解释双重导入。它不应该出现在 Django >= 1.4 中。
  • @antindexer 我可能会让根 urls.py 通过基于 INSTALLED_APPS 查找其他 urls.py 来自动构建 url 列表。
猜你喜欢
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 2019-08-06
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多