我正在运行Satchmo。有很多应用程序,我更改了产品应用程序中的一些源代码。如何正确覆盖Django中的应用程序?
所以我的问题是我怎样才能正确地覆盖这一点,因为这种变化是特定于网站的。我是否需要复制整个Satchmo框架并将其放入我的项目中,或者我可以将其中一个应用程序复制并放入说Satchmo> App> Products? (还挺喜欢的模板)
感谢
我正在运行Satchmo。有很多应用程序,我更改了产品应用程序中的一些源代码。如何正确覆盖Django中的应用程序?
所以我的问题是我怎样才能正确地覆盖这一点,因为这种变化是特定于网站的。我是否需要复制整个Satchmo框架并将其放入我的项目中,或者我可以将其中一个应用程序复制并放入说Satchmo> App> Products? (还挺喜欢的模板)
感谢
我所做的工作是复制我已更改的应用程序。在这种情况下,satchmo \ apps \ product。 我复制应用到我的项目文件夹 修改了我的setting.pyINSTALLED_APPS
从'product',
到'myproject.product',
这就是现在进行我已经到这个程序只为该项目所做的更改并离开原来的产品应用与不变仍然可以从其他项目正常阅读。
通常情况下,我会说最好的办法是到餐桌的Satchmo并保留副本更改。
如果您愿意使用python路径,请确保您的应用程序目录出现在另一个(默认)目录之前。从我的测试中,如果您有两个名称相同的应用程序/模块,则会使用找到的第一个应用程序/模块。
当您在settings.py
文件中向INSTALLED_APPS
添加'Django App'时,您告诉Django在您的“python路径”中存在具有该名称的可导入python模块。您可以通过查看存储在sys.path
处的列表内容来查看您的Python路径。
每当的Python(在这种情况下的Django)尝试将其导入检查每个在sys.path
列出的目录的模块中的顺序,当它找到一个匹配模块停止给定名称。
解决您的问题,那么就是太把你定制的Django应用程序,例如,在的Satchmo product
模块,为你的Python路径中的位置,这将“真正”的Satchmo product
模块之前检查。
因为我不知道你是如何目录结构奠定了我基本上做一个猜测在这里,但你的情况,这听起来像你拥有的Satchmo应用程式生活像/satchmo/apps/
和你在/my_custom_path/my_project/
项目的地方。在这种情况下,您可能需要将自定义的product
模块添加到/my_custom_path/my_project/product/
。由于Django settings.py
文件所在的路径总是首先检查第一个,这应该意味着您的定制product
模块将被首先找到并导入,而不是内置的Satchmo模块。
FYI:要检查,看看在你的Satchmo安装检查目录中运行的模块和python manage.py shell
然后在提示符下执行import sys; print sys.path
的顺序。
Hiya Chris。但是如果我不希望其他应用程序使用此自定义产品应用程序呢?他们仍然会首先导入本产品,因为它首先在路径上找到。我只想覆盖该网站的应用程序。 – darren 2011-02-28 09:12:31
也许如果你解释你的目录结构的布局,我将能够提供帮助。到目前为止,我还不清楚你的应用程序,库和项目是如何布置的。 – 2011-02-28 18:49:50
heya。这是一个网站的具体变化,所以我不想叉satchmo,并将其放在路径上,因为我不希望任何其他项目使用此。 – darren 2011-02-27 21:12:30
然后是第二个选项。所有你需要做的就是调整python路径(按照Chris的说明),并确保你的“产品”在标准satchmo的产品(我认为是通过pip/easy_setup安装)之前。 – 2011-02-28 18:05:37
另外(我不能让它做段落),你可以用virtualenv隔离你的网站。然后,只有您的网站才能访问修改后的satchmo副本... – 2011-02-28 18:07:48