Django:动态添加应用程序作为插件,自动构建网址和其他设置

哈米杜拉

我在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 

因此,如何通过基于INSTALLED_APPS查找其他urls.py来使根urls.py自动建立URL列表?我更改settings.py以便动态构建INSTALLED_APPS,TEMPLATES_DIR,STATICFILES_DIRS。(这意味着我不知道将在不同的服务器上安装多少个插件。它应该在运行时动态检查并添加它。)在:

python manage.py runserver

这是用于添加INSTALLED_APPS,TEMPATES_DIR,STATICFILES_DIR的代码。

PLUGINS_DIR = '/path_to/plugins/'

for item in os.listdir(PLUGINS_DIR):
    if os.path.isdir(os.path.join(PLUGINS_DIR, item)):
        plugin_name = 'app.plugins.%s' % item

    if plugin_name not in INSTALLED_APPS:
        INSTALLED_APPS = INSTALLED_APPS+(plugin_name,)

    template_dir = os.path.join(PLUGINS_DIR, '%s/templates/' % item)

    if os.path.isdir(template_dir):
        if template_dir not in TEMPLATE_DIRS:
            TEMPLATE_DIRS = TEMPLATE_DIRS+(template_dir,)

    static_files_dir = os.path.join(PLUGINS_DIR, '%s/static/' % item)

    if os.path.isdir(static_files_dir):
        if static_files_dir not in STATICFILES_DIRS:
            STATICFILES_DIRS = STATICFILES_DIRS + (static_files_dir,)

任何帮助将不胜感激。先感谢您。

解:

编辑:所以我做了如下:

我包括两个这样的模块:

from django.conf import settings
    from django.utils.importlib import import_module

然后在根urls.py中添加以下代码:

def prettify(app):
    return app.rsplit('.', 1)[1]


for app in INSTALLED_APPS:

    try:
        _module = import_module('%s.urls' % app)
    except:
        pass
    else:
        if 'eats.plugins' in app:
            urlpatterns += patterns('',
                                    url(r'^plugins/%s/' % prettify(app), include('%s.urls' % app))
                                    )

非常感谢@Yuka。谢谢。谢谢。谢谢。谢谢你....你让我的一天。

由香

您想要的是这样的东西:

from django.utils.importlib import import_module
for app in settings.INSTALLED_APPS:

    try:
        mod = import_module('%s.urls' % app)
        # possibly cleanup the after the imported module?
        #  might fuss up the `include(...)` or leave a polluted namespace
    except:
        # cleanup after module import if fails,
        #  maybe you can let the `include(...)` report failures
        pass
    else:
        urlpatterns += patterns('',
            url(r'^%s/' % slugify(app), include('%s.urls' % app)
        )

您还将想要slugify从django模板或utils中窃取并实现自己的工具(我现在不太确定它们现在在哪里吗?),并对其稍加修改以去除任何“点”和其他不需要的命名空间在您的“网址”中,例如,您可能不希望自己的网址看起来像这样:“ example.com/plugin.some_plugin_appname/”,但喜欢example.com/nice_looking_appname/

您甚至可能根本不想为其自动命名,而是在插件自己的“设置”模块中进行可配置的“设置”或类似的操作:

# plugin settings conf
url_namespace = 'my_nice_plugin_url/'

# root urls.py:
url(r'^%s/' % mod.url_namespace, include(...))
# or:
url(r'^%s/' % app.settings.url_namespace, inc..

您可能会明白要点。

亲切的问候,

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

与其他应用程序共享多个图像网址

来自分类Dev

使用.aar模块的Flutter插件可以在示例应用程序中构建并正常运行,但无法在其他应用程序中构建

来自分类常见问题

动态操作应用程序属性-保管库设置(或任何其他值)

来自分类Dev

构建具有时间效率的Web应用程序:Rails,Django,Node或其他

来自分类Dev

为提高时间效率而构建Web应用程序:Rails,Django,Node或其他

来自分类Dev

向NetBeans应用程序的基于Inno的设置中添加其他文件

来自分类Dev

防止其他应用程序使用动态框架

来自分类Dev

Azure门户添加可以创建Web应用程序,SQL Server和其他资源的用户

来自分类Dev

如何通过iOS应用程序动态创建网页?

来自分类Dev

在脉冲音频中添加其他应用程序

来自分类Dev

在其他Excel应用程序中添加表

来自分类Dev

Django:包含其他应用程序的模板

来自分类Dev

在 Django 中集成其他 python 应用程序

来自分类Dev

IE和其他应用程序的条件内联CSS?

来自分类Dev

可可:隐藏其他应用程序和自身

来自分类Dev

Audacity和其他应用程序中的播放问题

来自分类Dev

调整其他应用程序的活动大小或添加其他活动的视图

来自分类Dev

Windows 8电话应用程序链接到其他下载的应用程序和商店

来自分类Dev

如何将MS Word 2010设置为所有docx和其他类型的默认应用程序?

来自分类Dev

Ionic:使用相同的代码创建网络应用程序和本机应用程序?

来自分类Dev

Ubuntu 14.04隐私设置显示最近的应用程序和文件可以在仪表板和其他地方显示。其他地方的意思

来自分类Dev

将QWidget设置在当前应用程序之上,而不设置在其他应用程序之上

来自分类Dev

将QWidget设置在当前应用程序之上,而不设置在其他应用程序之上

来自分类Dev

从RCP应用程序中的其他插件使用现有视角

来自分类Dev

从其他应用程序中删除应用程序

来自分类Dev

设置Python应用程序的构建系统

来自分类Dev

其他项目构建失败时如何运行控制台应用程序

来自分类Dev

gradle 构建成功后更新 Google 服务插件和无法安装应用程序

来自分类Dev

如何绘制了该画在其他应用的应用程序? - 设置优先级?

Related 相关文章

  1. 1

    与其他应用程序共享多个图像网址

  2. 2

    使用.aar模块的Flutter插件可以在示例应用程序中构建并正常运行,但无法在其他应用程序中构建

  3. 3

    动态操作应用程序属性-保管库设置(或任何其他值)

  4. 4

    构建具有时间效率的Web应用程序:Rails,Django,Node或其他

  5. 5

    为提高时间效率而构建Web应用程序:Rails,Django,Node或其他

  6. 6

    向NetBeans应用程序的基于Inno的设置中添加其他文件

  7. 7

    防止其他应用程序使用动态框架

  8. 8

    Azure门户添加可以创建Web应用程序,SQL Server和其他资源的用户

  9. 9

    如何通过iOS应用程序动态创建网页?

  10. 10

    在脉冲音频中添加其他应用程序

  11. 11

    在其他Excel应用程序中添加表

  12. 12

    Django:包含其他应用程序的模板

  13. 13

    在 Django 中集成其他 python 应用程序

  14. 14

    IE和其他应用程序的条件内联CSS?

  15. 15

    可可:隐藏其他应用程序和自身

  16. 16

    Audacity和其他应用程序中的播放问题

  17. 17

    调整其他应用程序的活动大小或添加其他活动的视图

  18. 18

    Windows 8电话应用程序链接到其他下载的应用程序和商店

  19. 19

    如何将MS Word 2010设置为所有docx和其他类型的默认应用程序?

  20. 20

    Ionic:使用相同的代码创建网络应用程序和本机应用程序?

  21. 21

    Ubuntu 14.04隐私设置显示最近的应用程序和文件可以在仪表板和其他地方显示。其他地方的意思

  22. 22

    将QWidget设置在当前应用程序之上,而不设置在其他应用程序之上

  23. 23

    将QWidget设置在当前应用程序之上,而不设置在其他应用程序之上

  24. 24

    从RCP应用程序中的其他插件使用现有视角

  25. 25

    从其他应用程序中删除应用程序

  26. 26

    设置Python应用程序的构建系统

  27. 27

    其他项目构建失败时如何运行控制台应用程序

  28. 28

    gradle 构建成功后更新 Google 服务插件和无法安装应用程序

  29. 29

    如何绘制了该画在其他应用的应用程序? - 设置优先级?

热门标签

归档