1

使用 Django 模板时,我应该有一些模板充当“子例程”,可以这么说,还是在这些情况下我应该从我的代码中生成 HTML?

例如,我有一个包含多个名称列表的模板,我想将每个名称转换为select. 我是否应该有一个将name_list变量呈现为选择的模板,并执行以下操作:

#in the view:
return {'name_list_1': name_list_1, 
        'name_list_2': name_list_2, 
        'name_list_3': name_list_3}

#in the template:
{% with name_list_1 as name_list %}
  {% include "sub_name_list_select.html" %}
{% endwith %}
{% with name_list_2 as name_list %}
  {% include "sub_name_list_select.html" %}
{% endwith %}
{% with name_list_3 as name_list %}
  {% include "sub_name_list_select.html" %}
{% endwith %}

或者我应该在我的代码中有一个函数name_list_to_select_html,它做同样的工作,并这样做:

return {'name_list_1_html': name_list_to_select_html(name_list_1), 
        'name_list_2_html': name_list_to_select_html(name_list_2), 
        'name_list_3_html': name_list_to_select_html(name_list_3)}

#in the template:
{{ name_list_1_html|safe }}
{{ name_list_2_html|safe }}
{{ name_list_3_html|safe }}

还是这两个都错了,我的哲学完全错了?

附加问题:在速度方面,不断包含模板是否很慢?这是代码内 html 生成的奖励点吗?

4

1 回答 1

3

通常,HTML 应该只在模板系统或直接相关的代码中生成。这使数据视图与业务和功能逻辑完全分离。我觉得这是一个适当的关注点分离。使用您的第一个解决方案。

至于性能,Django 运行这两个代码可能需要大约相同的时间。但是,如果您知道不需要在每个请求上重新生成这些代码段,它就有内置的视图和模板片段缓存。

于 2012-07-19T18:18:08.387 回答