我正在尝试使用AJAX创建网站导航。我有导航菜单,其中包含指向不同视图的链接(在模板中使用{% url name %}
)。我想要做的是使用AJAX加载页面内容。我尝试加载的页面内容包含在内容块({% block content %}
)中。
我也找到了这个代码段http://djangosnippets.org/snippets/942/,但我想使用我已定义的视图,只使用ajax获取内容。
有什么建议吗?
答案 0 :(得分:6)
你应该使用专为这类事情而构建的django-pjax。
您只需要在基本模板中包含整个页面,或仅根据请求是否为ajax来block content
。
django-pjax使用jQuery进行AJAX调用,并使用HTML5推送状态API处理历史记录,这是一种非常好的方法,并且在IE旧版本中也可以优雅地降级。
答案 1 :(得分: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源代码,看看他们是如何做到的。