Django:使用视图来处理模板标签的逻辑?

时间:2014-04-20 14:26:37

标签: django architecture views conceptual templatetags

我写了一个模板标签,其中包含了我通常希望在视图中找到的大部分逻辑。在编写一些单元测试时,我开始想知道一种稍微不同的方法。我没有足够的经验来判断利弊(也许这甚至是一个众所周知的做法 - 或者说是不行......)。这就是我对你的意见感兴趣的原因。

我的想法是编写一个视图来处理所有逻辑,并使用templatetag作为包装器,将所有相关上下文传递给该视图并返回呈现的HTML。

我希望通过这种方法获得的优势:

  • 更容易提供不同的输出格式
  • 更容易DRY
  • 更容易测试
  • 使用视图中的装饰器和mixins进行权限检查
  • 视图内的缓存控制
  • 对ajax和/或边缘的好方法包括
  • 更高的灵活性

例如,呈现树导航的模板标签可以在通过模板标签访问时提供HTML,同时其相应的视图仍可通过URL访问。

视图可以提供不同的输出格式,如JSON,RSS,XML,句柄权限检查,......可以通过视图测试高级逻辑,只需确保模板标签测试用例的基本功能。

我很感激其他意见,提示或指向包或相关帖子的链接。

1 个答案:

答案 0 :(得分:1)

在我看来,模板标签的问题是:

  1. 抽象太多了。
  2. 挑战测试。
  3. 表现问题
  4. 我的建议是:

    1. 创建一个生成数据,缓存数据,处理权限以及其他任何相关数据的函数
    2. 分别编写三个以HTML,JSON和XML呈现数据的函数
    3. 记录并编写上述功能的测试
    4. 根据需要在视图,过滤器和模板标签中使用这些功能。调用函数的视图/过滤器/标签非常薄,易于管理。
    5. 这种方法带来的好处是:

      1. 可重复使用的代码
      2. 更易于测试的代码
      3. 更好的速度