如果您要为网站编写应用程序,但想让应用程序即插即用,那么您可以将其放入任何Django项目中,设置主URL并在那里,如果您将如何做到这一点希望保留便携式应用程序中包含的所有其他必需的实用程序应用程序。
示例:
site/
site/site-app1
site/templates/site-app1
site/util-app1
site/util-app2
site/util-app3
注意:site-app1使用了所有三个util-app。它以这种方式工作得很好。但现在,您决定将应用程序发送给某人,但只是该应用程序具有所有依赖项。
如果我们可以打包并发送这样的应用程序?:
site/site-app1
site/site-app1/template
site/site-app1/util-app1
site/site-app1/util-app2
site/site-app1/util-app3
然后你只需发送site-app1,一切都顺其自然。
有没有办法让实用程序应用程序作为子目录可移植?
注意:我们的想法是,我们不想发送整个项目,而是发送一个站点应用程序 仅限该项目。
答案 0 :(得分:2)
有一些关于可重复使用的django应用程序的演示文稿,所以搜索一下。这些应该让你去:
答案 1 :(得分:1)
@Gerry链接的演示文稿是一般信息的良好来源。要更直接地回答你的问题,没有办法将一个应用程序打包到另一个应用程序中(编辑抱歉,这是完全错误的。你可以放一个应用程序在另一个人的命名空间里面,它运行得很好。但这是一个奇怪的事情:你暗示一个应用程序是另一个应用程序的一部分;如果这是真的,它们将更容易用作单个应用程序所以我仍然推荐以下选项之一)。 AFAICT您的选择是:
如果可能,请将这些外部依赖项设置为可选项(例如,如果util_app1可用,则为增强功能;如果不可用,则为后备行为)。这就是django-tagging或django-mailer的应用程序数量。
将所有功能整合到一个应用中。根据您从实用程序应用程序实际依赖的代码量,如果您的应用程序必须依赖于依赖关系,这可能是让用户轻松完成任务的最佳选择。
分别打包和分发所有应用程序,并在文档和setup.py install_requires中记录依赖项。如果所有应用程序都独立使用,这种方法可能是最好的。如果它们并非都是独立有用的,为什么它们都是独立的应用程序?
答案 2 :(得分:1)
通过坚持某些做法,可以使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/
模板位于应用程序的templates目录中。约定不是强迫用户将它们复制到任何其他位置。最终,用户可以使用全局模板来覆盖应用程序中的模板。
将所有默认设置保留在app目录中的本地文件中。全局设置将覆盖这些设置。本地设置文件将具有以下结构..
from django.conf import settings
def get(key, default):
return getattr(settings, key, default)
SETTING_1 = get('SETTTING_1', 10)
这些惯例应涵盖大多数主要问题。