在Django中使用AJAX切换页面

8 投票
2 回答
4538 浏览
提问于 2025-04-16 20:39

我正在尝试使用AJAX来创建网站导航。我的导航菜单里有链接,可以跳转到不同的页面(在模板中使用{% url name %})。我想做的事情是通过AJAX加载页面内容。我想加载的页面内容是放在一个内容块里的({% block content %})。

我还发现了这个代码片段 http://djangosnippets.org/snippets/942/,但我想使用我已经定义好的视图,只通过AJAX获取内容。

有什么建议吗?

2 个回答

3

{% block content %} 这样的模板标签在 AJAX 处理时已经不再存在了。你需要做的是在你的内容块中创建一个命名的 <div>,比如:

{% block content %}
<div id="content"></div>
{% endblock content %}

然后你可以用类似下面的代码(使用 jQuery)来在需要的时候加载这个 <div>

$("#content").load(url, data, loadComplete);

这里的 url 是你想要加载的地址(期望返回 HTML),data 是表单数据(如果有的话,可以不填),而 loadComplete 是一个可选的函数,当数据加载完成后会被调用,格式是 function loadComplete(responseText, textStatus, XMLHttpRequest) {...}。即使你不想使用 jQuery,你也可以获取未压缩的 jQuery 源代码,看看他们是怎么做的。

7

你应该使用 django-pjax,这个工具就是为这种需求而设计的。

你只需要在基础模板中,根据请求是否是ajax,来包含整个页面或者只是 block content 部分。

django-pjax 使用 jQuery 来进行 AJAX 请求,并且利用 HTML5 的推送状态 API 来处理历史记录,这种方法非常好,而且在旧版的 IE 浏览器中也能正常工作。

撰写回答