我编写了一个templatetag,其中包含我通常希望在视图中找到的许多逻辑。 在编写一些单元测试时,我开始怀疑一种稍微不同的方法。 我没有足够的经验来判断优缺点(也许这甚至是众所周知的做法-还是不行...)。 这就是为什么我对您的意见感兴趣。

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

我希望从这种方法中获得好处:

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

例如,渲染树导航的模板标签在通过模板标签进行访问时可以传递HTML,同时其相应视图仍可通过URL访问。

该视图可以提供不同的输出格式,如JSON,RSS,XML,处理权限检查等。可以通过该视图测试高级逻辑,而不必为确保基本的基础而对templatetag测试用例负责。

我将不胜感激其他意见,提示或指向软件包或相关文章的链接。

===============>>#1 票数:1 已采纳

我认为模板标签的问题是:

  1. 太多的抽象。
  2. 具有挑战性的测试。
  3. 性能问题

我建议的是:

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

通过这种方法获得的好处是:

  1. 可重用代码
  2. 更容易测试的代码
  3. 更快的速度

  ask by sthzg translate from so

未解决问题?本站智能推荐:

1回复

使用Django模板标签的Mako模板

我们的Django网站是使用Mako模板构建的。 我们想使用一个名为django-socialregistration的第三方项目,但其模板标签使用Django的模板。 如果我们使用Django模板,我们可以 我该如何在Mako中做同样的事情? 您可以在Mako中将python海峡
1回复

我可以在Google App Engine上使用Django模板标签吗?

我的Django网站上有许多templatetags目录,我可以在Google App Engine上使用Django templatetags吗?
1回复

在Django模板标签内的文本内使用上下文变量

我想在模板中做类似的事情。 XYZ部分应该是可变的。 即我如何将上下文变量传递到该位置。 例如,如果我正在阅读第一个博客,则应该可以包含blog1.html。 如果我正在阅读第二个博客,则应该可以包含blog2.html等。 Django有可能吗?
2回复

在Django中使用模板标签过滤2D列表

我正在尝试编写一个模板标签来过滤2D列表。 这是我的模板标签: 这是我要传递给模板的列表: 我试图在摘要中引用第一个列表的第一个元素,如下所示: 但是,我收到了模板语法错误:index_two需要3个参数,其中提供2个。 我已尝试将模板标签调整为此处的答案,但
1回复

Django模板标签

我有一个模板标签 并像这样将其传递到我的网站中, 我的结果之一如下:“ 16天,13:39:59.900000”我不想看到多余的900000。可以吗?
1回复

我可以在其他逻辑中使用Django`URL`模板标记吗?

这是为了检查当用户是匿名用户并且当前在登录页面上时,他们是否在导航栏中看不到重复的登录表单(通常是这样): url是否必须先单独使用? 还是可以与if在线使用?
1回复

Django模板标签 - 运行一次并使用该值

我在模板中有一个循环: 在模型中我有一个函数/属性来计算我想要计算一次的东西。 问题是每次刷新页面时都会调用它。 什么是解决这个问题最有效的方法? 我可以为回复中的每个回复创建预先计算的块的字典,并将其作为上下文对象发送,或者我可以......
1回复

如何在Django模板中嵌套或共同使用两个模板标签?

我正在尝试使用模板过滤器来运行循环,但无法在同一语句/模板中合并两个python语句。 在模板中结合两个变量的正确方法是什么? 请参见下面的语法和说明: 我正在建立一个带有双索引的论坛,这意味着我有一个带有类别列表的col-md-2。 每个类别都有一个论坛,并且根据单击哪个类别,该类
2回复

Django模板:在模板标签中使用双花括号

我试图做的是允许不同但非常相似的视图使用同一模板。 有一个url引用,唯一的区别是反向调用的后半部分。 使用下面的示例,我得到一个NoReverseMatch ,如果不接受下面的代码,这是有意义的。 {% url outer:{{suffix}} %} 实现此目的的正确方法是什么
1回复

Django模板标签具有相同的名称

例如,我有2个模板标签 如果我在模板中加载两个templatetags 我有两个名为custom_tag标签。 如何在我的模板中使用它们? 我必须重命名吗?