Django中使用AJAX进行页面切换

发布于 2024-11-18 04:32:24 字数 332 浏览 1 评论 0原文

我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

彼岸花似海 2024-11-25 04:32:24

您应该使用 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.

翻身的咸鱼 2024-11-25 04:32:24

当 AJAX 看到东西时,像 {% block content %} 这样的模板标签早已消失了。您想要做的是在内容块中创建一个命名的

,例如:

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

然后您可以使用类似这样的(jQuery)代码来加载

code> 需要时:

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

其中 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:

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

Then you can use something like this (jQuery) code to load the <div> when needed:

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

where url is the URL you want to load (HTML expected in return), data is the form data (if any; can be omitted), and loadComplete is the optional function to be called when the data is loaded, and is of the form function 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文