我正在建立一个网站,我想在元素上加载用户提交的评论,我希望能够动态显示它们,而不是让网页必须一次性加载它们。所以我设置了这个ajax请求函数:
function loadcomments(){
$.ajax({
url: '/ajax/getcomments/',
data: {
'identifier': {{ identifier }}
'begin': 0,
'end': 30
},
dataType: 'json',
success: function (data) {
alert(data.comments);
}
});
};
以回应该请求的观点:
def obtain_comments(request, *args, **kwargs):
begin = kwargs.get('begin');
end = kwargs.get('end');
comments = end - begin
all_before = Comment.objects.order_by('-uploaded')[:end]
data = {
'comments': all_before.order_by('uploaded')[:comments]
}
return JsonResponse(data)
但我没有得到回应。我没有在浏览器控制台中看到任何错误,但是在django runserver终端中我看到:
Internal Server Error: /ajax/getcomments/
Traceback (most recent call last):
File "/home/trie/Desktop/django/venv/lib/python3.5/site-packages/django/core/handlers/exception.py", line 35, in inner
response = get_response(request)
File "/home/trie/Desktop/django/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 128, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/trie/Desktop/django/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 126, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/trie/Desktop/django/vidmiotest/player/views.py", line 64, in obtain_comments
comments = end - begin
TypeError: unsupported operand type(s) for -: 'NoneType' and 'NoneType'
或者如果我将开始和结束设置为固定值而不是kwargs:
Internal Server Error: /ajax/getcomments/
Traceback (most recent call last):
File "/home/trie/Desktop/django/venv/lib/python3.5/site-packages/django/core/handlers/exception.py", line 35, in inner
response = get_response(request)
File "/home/trie/Desktop/django/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 128, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/trie/Desktop/django/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 126, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/trie/Desktop/django/vidmiotest/player/views.py", line 67, in obtain_comments
'comments': all_before.order_by('uploaded')[:comments]
File "/home/trie/Desktop/django/venv/lib/python3.5/site-packages/django/db/models/query.py", line 1012, in order_by
"Cannot reorder a query once a slice has been taken."
AssertionError: Cannot reorder a query once a slice has been taken.
我尝试从'obtain_comments'视图中删除元素Identifier,以便在数据库中获得任何注释。然而,我希望视图能够回复我手动插入数据库的1条评论。
在urls.py
内我定义了这样的网址:
path('ajax/getcomments/', obtain_comments),
为什么我没有做出回应?
答案 0 :(得分:2)
args
和kwargs
用于在URL中传递并在URL模式中捕获的参数。你没有这些;您的Ajax正在GET查询字符串中发送值。所以你需要从request.GET
获取它们。另请注意,值将是字符串,因此您需要将它们转换为整数。
begin = int(request.GET['begin'])
end = int(request.GET['end'])
错误消息本身解释了另一个错误;切片后你无法订购。你应该以前做。