从视图发送html到django模板

时间:2013-02-22 03:26:52

标签: django

我是django的新手,所以我可能会以错误的方式解决这个问题(我很确定)。

尝试获取一个网页,在显示服务器列表状态的表格中显示postgresql数据库中的数据。

这是模板的一部分

<div class"row"=""><div class="span3" style="background-color:lightyellow; margin-left:20px">
<table class="table table-bordered table-condensed">
        <thead>
          <tr>
            <th>Server</th>
            <th>Status</th>
          </tr>
        </thead>
        <tbody>
        {{ res }}
        </tbody>
      </table>
</div></div>

在我看来,我有这个,

message = []
for res in data:
    message.append("          <tr>")
    message.append("            <td>" + str(res).split("'")[1] + "</td>")
    if str(res).split("'")[3] == 'No':
        message.append("            <td><FONT COLOR=\"008200\">Available</FONT> </td>")
    else:
        message.append("            <td><FONT COLOR=\"FF0000\">Down</FONT> </td>")
    message.append("          </tr>")

return render_to_response('health.html', {'res':message}, context_instance=RequestContext(request))

如果我打印而不是附加,我得到了我期望的结果HTML。

目前,我没有在该表的网页上显示任何内容。

我不希望它必须呈现列表,但是如果格式不正确,我会认为表中应该出现一些内容。

这个HTML处理应该在模板而不是视图中完成吗?

1 个答案:

答案 0 :(得分:0)

是的,通常最好在模板中进行所有HTML处理。这样,您可以将数据库访问逻辑与显示逻辑分开,从而减少耦合。这也意味着您可以轻松地重新使用模板。

因此,您应该使用视图函数来获取适当的对象,并将它们作为变量传递给模板。

尽管如此,你仍然走在正确的轨道上。为了使{{res}}变量正确显示,我认为您需要将模板更改为。

<tbody>
    {% for message in res %}
    {{ message }}
    {% endfor %}
</tbody>

这应该迭代传递给模板的res变量中的元素。