5

我有一个 django 项目,由客户在他们的服务器上安装。我还有一些应用程序是可以安装/卸载的可选功能插件。

我想要一种简单的方法来打包这些插件应用程序,以使安装/卸载变得轻松。我不希望他们将模板文件复制到一个目录,将应用程序复制到另一个目录,将媒体复制到第三个目录,依此类推。我希望他们不需要编辑 settings.py,但如果无法帮助也可以。

理想的情况是他们可以简单地解压缩到 python 路径上的某个位置(可能是一个特殊的插件目录?),然后删除它以卸载。有没有一种简单的方法来打包应用程序以便以这种方式安装它们?

4

2 回答 2

4

我将跳过对 Python 打包(distutils、setuptools、pip 等)的讨论,因为听起来您更喜欢使用简单的 zip 文件或 tarball。我将一次解决您提到的“痛点”:

模板文件:只要您的项目的 TEMPLATE_LOADERS 设置中包含“django.template.loaders.app_directories.load_template_source”,您就不必担心这个。您的每个应用程序都可以有一个“templates/”子目录,其中的模板将被加载,就像它们在您的项目范围的模板目录中一样。

媒体文件:应用媒体很痛苦。对于开发,您可以使用与 app_directories 模板加载器类似的操作的自定义 serve_media 视图(在每个应用程序中查找媒体)。在生产中,您必须复制文件、使用符号链接或使用网络服务器级别的别名。有几个实用应用程序试图解决这个问题。我现在使用django-staticfiles

编辑 settings.py:解决这个问题没有简单的方法。要使其模型、模板标签、管理命令等工作,应用程序必须在 INSTALLED_APPS 中列出。你可以做的是在你的 settings.py 中编写一些自定义代码,列出某个目录的内容,并将它在那里找到的包动态添加到 INSTALLED_APPS。有点危险(仔细考虑谁有权在该目录中放置文件,因为他们拥有您王国的密钥),并且只有在服务器重新加载时才会检测到新文件,但它应该可以工作。

我认为如果您将这些解决方案放在一起,就有可能实现您的理想情况:解压缩安装,删除卸载。

于 2009-08-28T21:27:44.880 回答
1

编辑 settings.py:您的插件可以从其自己目录中的设置文件中读取其设置。他们只需要编辑根 settings.py 即可从“INSTALLED_APPS”中添加/删除插件路径。

于 2009-08-29T14:20:19.773 回答