Django中使用AJAX进行页面切换
我正在尝试使用 AJAX 创建网站导航。我有导航菜单,其中包含指向不同视图的链接(在模板中使用 {% url name %}
)。我想做的事情是使用 AJAX 加载页面内容。我尝试加载的页面内容包含在内容块({% block content %}
)中。
我还找到了这个片段 http://djangosnippets.org/snippets/942/,但我想使用我已经定义的视图并且仅使用ajax获取内容。
有什么建议吗?
I am trying to create site navigation using AJAX. I have navigation menu with links to different views (using {% url name %}
in template). The thing I am trying to do is to load the page content using AJAX. The page content I am trying to load is enclosed in content block ({% block content %}
).
I also found this snippet http://djangosnippets.org/snippets/942/, but I want to use the views I have already defined and only get the content using ajax.
Any suggestions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您应该使用 django-pjax ,它是专门为此类事情构建的。
您所要做的就是在基本模板中,根据请求是否为 ajax,包含整个页面或仅包含
块内容
。django-pjax 使用 jQuery 执行 AJAX 调用,并使用 HTML5 推送状态 API 操作历史记录,这是一种非常好的方法,并且在 IE 旧版本中也可以正常降级。
You should use django-pjax which is built exactly for that kind of thing.
All you will have to do is to, in the base template, include the whole page or just the
block content
based on whether the request is ajax or not.django-pjax does the AJAX calls using the jQuery and manipulates history using HTML5 push state API, which is a very good way to do it and also gracefully degrades in IE older versions.
当 AJAX 看到东西时,像
{% block content %}
这样的模板标签早已消失了。您想要做的是在内容块中创建一个命名的,例如:
然后您可以使用类似这样的(jQuery)代码来加载
code> 需要时:
其中
url
是要加载的 URL(预期返回 HTML),data
是表单数据(如果有;可以省略),并且loadComplete
是可选函数加载数据时调用,其形式为function loadComplete(responseText, textStatus, XMLHttpRequest) {...}
。即使您不想使用 jQuery,您也可以获取未缩小的 jQuery 源代码并了解它们是如何实现的。Template tags like
{% block content %}
are long gone by the time AJAX sees things. What you want to do is create a named<div>
in your content block, like:Then you can use something like this (jQuery) code to load the
<div>
when needed:where
url
is the URL you want to load (HTML expected in return),data
is the form data (if any; can be omitted), andloadComplete
is the optional function to be called when the data is loaded, and is of the formfunction loadComplete(responseText, textStatus, XMLHttpRequest) {...}
. Even if you don't want to use jQuery, you can get the non-minified jQuery source and see how they do it.