gpt4 book ai didi

javascript - 使用 AJAX 将 RSS 提要传递到 django View

转载 作者:行者123 更新时间:2023-12-03 10:17:01 25 4
gpt4 key购买 nike

我对 ajax 还很陌生。以下是我的用例:我正在开发一个副项目,将显示不同体育项目的新闻和比分。为了执行相同的操作,我使用来自不同来源的 rss feed。我能够使用“feedparser”插件在 django View 中获取和解析 rss feed,并将其作为上下文传递给相应的模板。以下是我的 View 函数和模板(针对板球)。

def cricket(request):
feeds_cric = feedparser.parse('http://www.espncricinfo.com/rss/content/story/feeds/0.xml') #espncricinfo feed.
feeds_cric_scores = feedparser.parse('http://static.cricinfo.com/rss/livescores.xml') #espncricinfo feed.
context = {'feeds_cric': feeds_cric,'feeds_cric_scores' : feeds_cric_scores}
return render(request,'scorecenter/cricket.html', context)

以下是相应的模板。

{% extends "scorecenter/index.html" %}
{% block content %}
<ul>
{% for entry in feeds_cric.entries %}
<li><a href="{{ entry.link }}">{{ entry.title }}</a></li>
<p>{{ entry.description }}</p>
{% endfor %}
</ul>

{% endblock content %}

{% block score %}
<ul>
{% for entry in feeds_cric_scores.entries %}
<li><a href="{{ entry.link }}">{{ entry.title }}</a></li>
<!-- <p>{{ entry.description }}</p> -->
{% endfor %}
</ul>
{% endblock score %}

以下是index.html文件。

现在,我想使用 AJAX 仅重新加载页面的某些 block ,而不是重新加载和重定向整个页面。我写了一个脚本来检查

<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">Allscores</a>
</div>
<div>
<ul class="nav navbar-nav navbar-right">
<li><a href="#" onclick="urlChecker('cricket')">Cricket</a></li>
<li><a href="#" onclick="urlChecker('football')">Football</a></li>
<li><a href="#" onclick="urlChecker('basketball')">Basketball</a></li>
<li><a href="#" onclick="urlChecker('tennis')">Tennis</a></li>
</ul>
</div>
</div>
</nav>
<div class="navbar navbar-default" id="empty_nav"></div>

<div class="testingData">This should be updated</div>

<div class="row">
<div class="col-sm-8" id="news">

<h3>Latest News</h3>
{% block content %}
{% endblock content %}

</div>
<div class="col-sm-4" id="scores">

<h3>Latest scores</h3>
{% block score %}
{% endblock score %}

</div>
</div>

<div id="footer">
Copyright © acllscores.com
</div>
</body>

在我的 urlChecker() 脚本中,我检查单击了哪个 anchor 标记并分配相应的 url。以下是脚本:

function urlChecker (route) {
switch(route) {
case 'cricket':
$.post( "/scorecenter/cricket/", function( data ) {
$( ".result" ).html( data );
});
break;
case 'football':
$.post( "/scorecenter/football/", function( data ) {
$( ".testingData" ).html( data );
});
break;
case 'tennis':
$.post( "/scorecenter/tennis/", function( data ) {
$( ".testingData" ).html( data );
});
break;
case 'basketball':
$.post( "/scorecenter/basketball/", function( data ) {
$( ".testingData" ).html( data );
});
break;

}
}

更新:添加 url 文件:

urlpatterns = patterns('',
url(r'^$', views.index,name='index'),
url(r'^test/$', views.test,name='test'),

url(r'^cricket/$', views.cricket,name='cricket'),
url(r'^basketball/$', views.basketball,name='basketball'),
url(r'^football/$', views.football,name='football'),
url(r'^tennis/$', views.tennis,name='tennis'),

)

我不明白如何使用 ajax 将提要数据发布到我的模板。请帮忙

最佳答案

从 Ajax 的 Angular 来看

根据您在问题中所写的内容,发送 GET 请求比发送 POST 请求更合适。您不会向这些端点发送它们需要存储的任何信息,而只想从它们检索更新。这不会改变您的代码太多,您可以使用 $.get() 来做到这一点而不是 $.post()

<小时/>

从Django的 Angular 来看

发送 GET 请求也更容易,因为您不需要考虑 ☞ Django's CSRF protection 。发出其他 ajax 请求(例如 POSTDELETE 等)也不是那么困难,但它需要一个额外的步骤,涉及在每个请求中发送 CSRF token (链接文档中有详细记录)。

<小时/>

渲染 Ajax 请求的结果

目前,您用来呈现 Ajax 结果的模板可能存在概念问题,例如scorecenter/cricket.html。在最顶部,您从 index.html 扩展,这意味着每个请求不仅会返回您想要插入的 html block ,还会返回 index.html< 的一部分。/

此外,由于您将通过 Javascript 将结果插入到已加载的网站中,因此无需定义模板 block 。让这些模板仅准确渲染您想要使用 $('.testingData').html(data) 插入 DOM 的 html。

<小时/>

调试 Ajax 请求问题

开发网站时,打开浏览器中的开发人员工具并激活其中的控制台(Firefox 和 Chrome 都可以)。每当 Ajax 请求失败时,它都会显示一个错误,然后您可以进行内省(introspection)。

如果请求未经授权,常见错误为 404(如果找不到端点)、400403500 如果服务器处理您的请求时出错。 ☞ More complete list of status codes

请随时用更多详细信息更新您的问题。由于这是一个非常广泛的主题,请做好可能被社区关闭的准备。在这种情况下,您可以随时搜索更具体的问题,或者如果找不到答案,请将其放入新问题中。

关于javascript - 使用 AJAX 将 RSS 提要传递到 django View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29827459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com