2011-07-01 49 views
5

我正尝试使用AJAX创建站点导航。我有导航菜单,包含指向不同视图的链接(在模板中使用{% url name %})。我想要做的是使用AJAX加载页面内容。我尝试加载的页面内容包含在内容块({% block content %})中。在Django中使用AJAX切换页面

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

有什么建议吗?

+0

你用django-pjax解决了吗? –

+0

基本上我做过。 (对原始脚本进行少量更改以允许我在单个请求中更新多个HTML元素) –

回答

6

你应该使用django-pjax这是专为这种事情而建造的。

您只需要在基本模板中包含整个页面或根据请求是否为ajax包含block content

django-pjax使用jQuery进行AJAX调用,并使用HTML5推送状态API处理历史记录,这是一种非常好的方式,并且在IE旧版本中也能够正常降级。

+0

这实际上非常酷。谢谢 –

+0

如果它可以与Django 1.2一起使用,它会很棒。 – Paolo

3

当AJAX看到东西时,像{% block content %}这样的模板标签早已消失。你要做的是创建一个名为您的内容块<div>,如:

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

然后你可以使用这样的事情(jQuery的)代码加载<div>需要的时候:

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

哪里url是你想要加载的URL(HTML期望作为回报),data是表单数据(如果有的话;可以省略),loadComplete是数据加载时要调用的可选函数,形式为function loadComplete(responseText, textStatus, XMLHttpRequest) {...} 。即使你不想使用jQuery,你也可以得到非缩小的jQuery源代码,并看看它们是如何实现的。

+0

我知道它已经不存在了,我有一个类似于你所建议的div。我想在这里做的事情是使用已定义的视图(这将使用没有ajax请求),并创建一些响应,将只返回名为内容块的内容,以便我可以在JavaScript中处理它,并将div的内容。 –