我最近发现了什么是包含可以重复并且我们可以在许多页面上找到的小块模板的最佳方式。我不是以 Django 的方式称它们为“小部件”(如果我引用文档,小部件是输入元素的表示),而是以它们可以停靠到网站的任何页面的方式。我想:与文章相关的评论列表、右侧菜单中的聊天框、评论表单或其他...
问题是我只看到两种解决方案,一种比另一种更好,但并不完全让我满意。
- 基于类的视图:我认为最好的方法是使用 mixins。
- 优点:以有效的方式处理表单,逻辑保持不变(表单处理,数据库查询在必须完成的地方完成)。例如,当我们从 CommentListMixin 继承时,我们真正创建了文章与其评论之间的现有关系。
- 缺点:我们必须显式地从相应的mixin继承。我们不能做我们想做的所有事情,因为从 mixins 和视图都继承可以覆盖其中一个的属性。
- 自定义标签:我认为这是更糟糕的方式。标签不存在呈现模板的一部分(使用数据库查询,创建表单),而是“操纵”数据,以特定方式呈现它。
- 优点:不需要在视图中显式调用,“全部”在模板中(不应该)。
- 缺点:处理表单很棘手,当我使用它们来完成一个视图应该完成的工作时,逻辑被打破了。
现在,我听到你说:“所以,你应该使用基于类的视图和混合”。实际上不,当我将它们用于“小部件”(作为 mixin 实现)以显示与当前文章相关的评论列表时,这不是问题,我只需将相关的 mixin 添加到当前视图中。但是当我想在我网站的所有页面上放置一个“小部件”时,它就成了一个问题。例如,聊天框与特定文章无关,我不想在我的所有视图上添加 ChatBoxMixin(如果我决定从我的网站中删除它怎么办?)。所以在这个例子中,我应该使用自定义标签,因为我相信这是轻松完成它的最佳方式。
有人可以减轻我的负担吗?