集成第三方django应用程序和模板

时间:2012-02-25 15:53:54

标签: django django-templates

我是Django的新手,并且对如何最好地集成第三方应用程序感到相当困惑。在我(可能是天真的)对DRY的解释中,我想最小化复制/粘贴不仅是我自己的代码而且还有其他人的代码,所以我很高兴,例如,使用contrib.auth的模式主要是黑色如果我需要有关auth.User的其他信息(通过使用UserProfile对象或继承扩展auth.User)。这就是我想象的我也会使用大多数第三方应用程序。

然而,我很快发现这非常困难,所以现在我已经辞职了,我的所有第三方应用程序的“副本”都存放在我的项目文件夹中,这些应用程序基本上是完整副本,只需要很少的更改。最后一根稻草是我想要添加一个基本的博客(我选择了django-basic-blog)并且需要更改单个模板,而且我认为没有比在我的项目中使用该应用程序复制该应用程序更好的解决方案了。单个模板已更改。

我的问题:

  • 在这个特殊情况下,我需要更改一个模板,这是(复制整个应用程序)我能做的最好吗?如果我只是需要更改单个模型,我可以保持第三方应用程序完好无损并在我自己的应用程序中进行模型继承......
  • 一般来说,这种在我的项目下复制应用程序并对每个应用程序进行修补的做法感觉非常浪费和肮脏。我觉得如果我使用频繁更新的第三方应用程序,同步更改将会很痛苦。我应该学会爱炸弹还是有一些明显的建筑模式/ Django提供的帮助我不知道?

1 个答案:

答案 0 :(得分:5)

您不应该修改第三方模块的代码,因为很难跟踪更改,并且会将复制到许多项目中的相同代码弄得一团糟。典型的解决方案是在python路径中只有每个第三方模块的一个版本,而不是在项目的目录中。然后,所有项目都可以重用这个单一的包。

然而,模板需要不同的方法,因为它们通常需要在每个项目的基础上进行修改。这就是为什么Django附带settings.TEMPLATE_DIRSsettings.TEMPLATE_LOADERS

TEMPLATE_DIRS指定包含模板文件的目录列表。 TEMPLATE_LOADERS指定用于加载模板的类。将按照定义的顺序使用加载器,并且将按照定义的顺序遍历目录。因此,您可以先在项目目录中查找模板,然后在其他模块中查找模板作为后备。

所以基本上你不需要复制整个python模块来改变一个模板。只复制该第三方模块的模板目录,甚至只复制您想要更改的单个模板。如果你放在正确的位置并添加TEMPLATE_DIR中的路径,Django将使用它。