【发布时间】:2014-04-20 14:26:36
【问题描述】:
我编写了一个模板标签,其中包含我通常希望在视图中找到的大部分逻辑。在编写一些单元测试时,我开始想知道一种稍微不同的方法。我没有足够的经验来判断利弊(也许这甚至是一种众所周知的做法——或者不可行......)。这就是我对您的意见感兴趣的原因。
我的想法是编写一个视图来处理所有逻辑,并使用模板标签作为包装器,将所有相关上下文传递给该视图并返回呈现的 HTML。
我希望从这种方法中获得的优势:
- 更容易提供不同的输出格式
- 更容易干燥
- 更轻松的测试
- 在视图中使用装饰器和 mixin 进行权限检查
- 视图内的缓存控件
- 对 ajax 和/或边缘方面的好方法包括
- 更高的灵活性
例如,呈现树状导航的模板标签可以在通过模板标签访问时提供 HTML,同时其对应的视图仍可通过 URL 访问。
视图可以提供不同的输出格式,如 JSON、RSS、XML、处理权限检查……可以通过视图测试高级逻辑,而留给模板标签测试用例的责任只是为了确保最基本的。
我会很感激其他意见、提示或包或相关帖子的链接。
【问题讨论】:
-
难道不能把templatetag的大部分代码拉出来放到一个单独的utils.py模块中,同时从templatetag和view中调用吗?
-
反对将其全部包含在模板标签中,这将是一个明显的改进。我仍然喜欢将所有内容都包含在视图中的想法。由于模板标签解析了当前的应用程序命名空间 full_path 并进行了一些 SESSION 检查,它执行了两种我一直希望在视图中找到的逻辑。我很好奇,性能方面:与从模板标签中实例化另一个视图对象相比,utils.py 解决方案是否带来了巨大的好处?
标签: django architecture views conceptual templatetags