【发布时间】:2011-07-05 08:40:18
【问题描述】:
我正在运行 Satchmo。有很多应用程序,我已经更改了 Product 应用程序中的一些源。
所以我的问题是如何正确覆盖它,因为更改是特定于站点的。我是否必须复制整个 Satchmo 框架并将其放入我的项目中,或者我可以将其中一个应用程序复制出来并将其放置在 Satchmo>App>Products 中? (有点像模板)
谢谢
【问题讨论】:
我正在运行 Satchmo。有很多应用程序,我已经更改了 Product 应用程序中的一些源。
所以我的问题是如何正确覆盖它,因为更改是特定于站点的。我是否必须复制整个 Satchmo 框架并将其放入我的项目中,或者我可以将其中一个应用程序复制出来并将其放置在 Satchmo>App>Products 中? (有点像模板)
谢谢
【问题讨论】:
我所做的工作是复制我已更改的应用程序。在这种情况下 satchmo\apps\product。
我将应用程序复制到我的项目文件夹中
将我的 setting.py INSTALLED_APPS 从 'product', 修改为 'myproject.product',
这现在只包含我对此项目所做的更改,原始产品应用程序保持不变,仍然可以从其他项目中正常读取。
【讨论】:
当您在 settings.py 文件中将“Django App”添加到 INSTALLED_APPS 时,您是在告诉 Django 在您的“python 路径”中存在一个具有该名称的可导入 python 模块。您可以通过查看存储在sys.path 的列表内容来查看您的python 路径。
每当 Python(在本例中为 Django)尝试导入模块时,它会检查sys.path 中列出的每个目录按顺序,当它找到与给定名称匹配的模块时会停止。
那么解决您的问题的方法是将您自定义的 Django 应用程序(例如 Satchmo product 模块)放入您的 Python 路径中的某个位置,该位置将在“真正的”Satchmo 之前进行检查 product 模块。
因为我不知道您的目录结构是如何布置的,所以我基本上在这里进行猜测,但就您而言,听起来您的 Satchmo 应用程序位于 /satchmo/apps/ 之类的地方,而您的项目位于 @ 987654328@。在这种情况下,您可能希望将自定义的product 模块添加到/my_custom_path/my_project/product/。因为始终检查 Django settings.py 文件所在的路径首先,这意味着将首先找到并导入您自定义的 product 模块,而不是内置的 Satchmo 模块。 p>
仅供参考:要检查并查看 Satchmo 安装检查模块目录的顺序,请运行 python manage.py shell,然后在提示符中执行 import sys; print sys.path。
【讨论】:
通常,我会说最好的办法是分叉 Satchmo 并保留一份包含更改的副本。
如果您愿意使用 python 路径,请确保您的应用程序目录出现在其他(默认)目录之前。根据我的测试,如果您有两个名称相同的应用程序/模块,则使用找到的第一个。
【讨论】: