Django:我应该有复杂的模板变量名称还是复杂的视图

时间:2011-07-27 05:12:29

标签: django

在django,我应该更喜欢哪个,为什么?

  • 长模板变量名称,尽可能少地传递“根对象”(例如请求):

    {% if request.current_page.get_children.0.get_absolute_url %}

  • 或传递了许多不同的“根对象”并保持模板变量名称简单:

    {% if first_child_url %}

  • 在中间的某个地方,例如通过children

    {% if children.0.get_absolute_url %}

    或传递first_child

    {% if first_child.get_absolute_url %}

第一种方法的优点是更松散的耦合,因为每次我需要使用另一个变量时我都不需要改变视图;第二种方法的优点是模板更简单,更清洁。

如果我使用的通用视图(或第三方视图)不允许我添加其他上下文变量(因此添加上下文变量的唯一方法是编写中间件或上下文处理器),这会改变什么吗? / p>

2 个答案:

答案 0 :(得分:2)

如果你是唯一的开发者,那主要是品味问题。但是,如果编写视图的人不是编写模板的人,那么在视图和模板之间配合明确定义的“契约”要容易得多。

我倾向于将视图的参数视为模板,就像我考虑API接口一样。我的网站逻辑可以改变,但只要我尊重传递给模板的数据结构,我就不需要重写任何东西 - 当在一个小组中工作时,这是至关重要的。

答案 1 :(得分:2)

对此没有正确答案,但我可以给你一些其他的考虑:

1)模板中的错误变量名称将无声地失败,这就是为什么我通常会尝试避免像

这样的事情
{% if request.current_page.get_children.0.get_absolute_url %}

2)与此形成对比的是,视图中的任何问题都会立即引发异常并且显而易见的是调试

first_child_url = request.current_page.get_children[0].get_absolute_url
3)当我遇到这种情况时,我有时会做的是将快捷方法添加到模型中,这允许我从模板中调用方法,但仍然保持复杂性在等式的python端。

所有这一切,如果你不能添加额外的上下文并且需要使用模板标签(如你的评论中提到的那样),我认为如果你选择复杂的模板选项是最好的。 我只使用自定义模板标签,这是做某事的唯一方法,从不作为捷径。

希望这会有所帮助......