【发布时间】:2018-11-13 05:27:24
【问题描述】:
我知道 SO 中存在大量此类问题。但没有一个能满足我的问题。然而,我的代码在我的 PC 的 localhost 中工作,但不在在线服务器中。该网站是here。您可以转到English 选项卡并单击新闻标题以查看 ajax 请求。它是通过urls.py 文件中定义的URL 从模板到view.py 文件的简单ajax 请求。 url(即show_recommendation)的定义方式如下:
from django.contrib import admin
#from django.urls import path
from django.conf.urls import url
from khobor import views
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^admin/', admin.site.urls),
url(r'^find_feed/', views.find_feed, name="find_feed"),
url(r'^show_articles/', views.show_articles, name="show_articles"),
url(r'^clear_cookie/', views.clear_cookie, name="clear_cookie"),
url(r'^show_recommendation', views.show_recommendation, name="show_recommendation"),
]
模板中的JavaScript代码如下:
$.ajax({
url:"/show_recommendation/",
method:"POST",
dataType: 'JSON',
data:{
id_found:id_found,
csrfmiddlewaretoken: '{{ csrf_token }}'
},
success:function (data) {
//data=$.parseJSON(data);
alert(data);
if(window.console){
console.log(" response data = ");
console.log(data);
}
if($.isArray(data)){
for(i=0; i<data.length; i++){
var id_found=data[i][0];
if(window.console){
console.log(" id found = "+id_found+" id found result = "+jQuery.inArray(id_found, ids_all));
}
if(jQuery.inArray(id_found, ids_all) ==-1){
ids_all.push(id_found);
new_ids.push(id_found);
if(window.console){
console.log(" id pushed = "+id_found);
}
//$("#recommendations").append('<li>'+data[i][0]+' ... '+data[i][1]+'</li>');
$("#recommendations").append('<li class="article_indiv inline_block">' +
'<span class="top_image inline_block" data-id="'+data[i][0]+'" ><img src="'+data[i][4]+'" alt="image"/>'+
'</span>' +
'<a class="link" data-id="'+data[i][0]+'" target="_blank" href="'+data[i][2]+'" >'+data[i][3]+'</a>' +
'</li>');
$(".top_image").imagefill();
/* $(".top_image").each(function(){
$elem = $(this);
var data_id =$elem.attr('data-id');
if(jQuery.inArray(data_id, new_ids) !=-1){
$elem.imagefill();
}
});*/
}
} // end of for loop
Cookies.set('ids_all', ids_all);
}
}
});
在view.py 我有:
def show_recommendation(request):
# recommendations=['item1','item2']
# json_list=json.dumps(recommendations)
if request.method=="POST" and request.is_ajax():
#print("u see this response ? ");
#return HttpResponse("this is the response ")
id_found = request.POST['id_found'];
news_found=news.objects.get(id=id_found)
content_found=news_found.content
all_news = news.objects.exclude(id=id_found).order_by('-id').all()
myList=[]
for news_indiv in all_news:
content=news_indiv.content
id=news_indiv.id
headline=news_indiv.headline
url=news_indiv.url
image=news_indiv.image
result_similarity=cosine_sim(content,content_found)
myList.append([id, result_similarity,url,headline,image])
# myList = [3, 2, 5, 6, 1, 0, -5, 6, -7]
# myList = [[12, .45633], [13, .245633], [14, .3323], [15, .8756]]
result = quickSort(myList)
total_rows = len(result)
resultList=[]
resultList.append(result[total_rows-1])
resultList.append(result[total_rows-2])
resultList.append(result[total_rows-3])
#print("resultList === ")
#print(resultList)
json_list = json.dumps(resultList)
#if(json_list is None):
# json_list="0";
print ("before HttpResponse ")
return HttpResponse(json_list)
#return HttpResponse("dfdfdfdf")
#return json_list
在我的在线服务器中,我收到以下错误虽然它在我的 PC 上的本地主机中运行良好:
Internal Server Error: /show_recommendation/
Traceback (most recent call last):
File "/usr/lib64/python3.6/site-packages/django/core/handlers
/exception.py", line 35, in inner
response = get_response(request)
File "/usr/lib64/python3.6/site-packages/django/core/handlers/base.py",
line 139, in _get_response
"returned None instead." % (callback.__module__, view_name)
ValueError: The view khobor.views.show_recommendation didn't return an
HttpResponse object. It returned None instead.
[03/Jun/2018 21:00:44] "POST /show_recommendation/ HTTP/1.1" 500 54424
现在如何消除错误?
【问题讨论】:
-
不仅当您在
show_recommendation(request):上发帖时出现错误,而且当您使用 GET 方法访问视图时,没有 Http 响应。想想当request.method != 'POST',会有什么反应 -
@Lemayzeur,在线服务器上传了错误的文件。立即在线查看。
-
@Lemayzeur,我在网络浏览器中点击了 url (amarkhobor.ml:8000/show_recommendation) 并再次收到错误。
-
你不具备处理'GET'请求的条件。
-
@MosesKoledoye,ajax 正在那里发出
POST请求。我为什么要在那里处理GET请求?只是为了抑制GET请求中的错误,我可以处理。但它仍然没有解决 ajax POST 请求中的错误。
标签: python ajax django python-3.x