在块中渲染模板而不加载整个页面

时间:2014-02-12 13:19:32

标签: django templates block

我有一个名为base.html的模板,看起来简化如下:

<html>
<head>
    <title>{% block title %} Title {% endblock %}</title>
</head>
<body>
    <div class="header">
        {% block header %}My Header{% endblock %}
    </div>

    <div class="navigation">
        {% block navigation %}My Navi{% endblock %}
    </div>

    <div class="content">
        {% block content %}Content{% endblock %}
    </div>
</body>
</html>

当我点击导航中的链接时,我想在内容块中呈现新内容而不再重新加载标题和导航。

1 个答案:

答案 0 :(得分:1)

您有几个选择:Ajax或iFrames

如果你使用Ajax路由,你可以渲染模板服务器端并在Ajax响应中返回HTML:

import json
from django.http import HttpResponse
from django.template.loader import render_to_string

def render_template(request):
    result = {'html': render_to_string('your-template.html', {})}
    return HttpResponse(json.dumps(result, ensure_ascii=False),
        content_type='application/json')

然后,您可以使用jQuery或其他任何内容在主页面中更新HTML。

或者,您可以使用JavaScript在单击时设置iFrame的src以呈现视图而不更新整个页面。它取决于在用户体验,维护等方面最适合您的方式。