在Django中使用AJAX切换页面
我正在尝试使用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 浏览器中也能正常工作。