代码之家  ›  专栏  ›  技术社区  ›  Val Neekman

Django-应用程序子目录站点/app1/app2/app3

  •  1
  • Val Neekman  · 技术社区  · 16 年前

    如果你想为一个网站写一个应用,但想让应用插件播放,这样你就可以把它放到任何Django项目中,设置主URL,然后就可以了,如果你想让所有其他必需的实用程序都包含在你的便携式应用中,你会怎么做。

    例子:

    site/
    site/site-app1
    site/templates/site-app1
    site/util-app1
    site/util-app2
    site/util-app3
    

    注意:site-app1使用了所有三个util应用程序。这样做效果很好。但是现在,你决定把这个应用程序发送给某人,但只是那个应用程序及其所有依赖项。

    如果我们能像这样打包和发送应用程序?:

    site/site-app1
    site/site-app1/template
    site/site-app1/util-app1
    site/site-app1/util-app2
    site/site-app1/util-app3
    

    然后你只需发送site-app1,一切都会随之发生。

    有没有一种方法可以将实用程序作为子目录进行移植?

    注意:我们的想法是不想发送整个项目,而是在 仅限于项目。

    3 回复  |  直到 16 年前
        1
  •  1
  •   Carl Meyer    16 年前

    到的演示文稿@gerry链接是一般信息的良好来源。更直接地回答你的问题 ,无法将一个应用程序打包到另一个应用程序中 ( 编辑 对不起,这是完全错误的。您可以将一个应用程序放到另一个应用程序的名称空间中,它工作得很好。但这是一件奇怪的事情:你暗示一个应用程序是另一个应用程序的一部分;如果这是真的,它们将更容易作为一个应用程序使用。所以我还是推荐下面的一个选项)。afaict您的选择是:

    1. 如果可能,将这些外部依赖项设置为可选(即,如果可用的是增强功能,则设置为回退行为,如果不可用则设置为回退行为)。这是多少应用程序的行为,比如说,Django标签或Django邮件。

    2. 将所有功能滚动到一个应用程序中。根据你实际依赖于实用程序的代码的多少,如果依赖性对于你的应用程序的运行是绝对必要的,那么这可能是让你的用户轻松处理事情的最佳选择。

    3. 分别打包和分发所有应用程序,并注意文档和setup.py安装中的依赖项。如果所有的应用程序都是独立有用的,那么这种方法可能是最好的。如果它们都不是独立有用的,为什么它们都是独立的应用程序?

        2
  •  2
  •   Gerry    16 年前

    有一些关于可重用的django应用程序的演示,所以四处搜索。这些应该让你去:

        3
  •  1
  •   Chirayu Patel    16 年前

    Django应用程序可以通过遵循某些实践进行移植。当然,这些不是强制性的

    应用程序位置

    约定是在apps/目录中添加应用程序,并修改manage.py(最后修改apache配置)以包括

    import sys
    from os.path import abspath, dirname, join
    PROJECT_ROOT = abspath(dirname(__file__))
    sys.path.insert(0, join(PROJECT_ROOT, "apps"))
    

    您的目录结构将类似

    site
    site/apps/
    site/apps/app1/
    site/apps/app2/
    

    模板

    模板位于应用程序的模板目录中。约定不强制用户在任何其他位置复制它们。最终,用户可以使用全局模板覆盖应用程序中的模板。

    设置

    将所有默认设置保存在应用程序目录中的本地文件中。这些设置将被全局设置覆盖。本地设置文件将具有以下结构。

    from django.conf import settings
    
    def get(key, default):
        return getattr(settings, key, default)
    
    SETTING_1 = get('SETTTING_1', 10)
    

    这些公约应涵盖大多数重大问题。