2017-01-10 99 views
1

我是django和ajax的新手,所以我一直在研究项目以了解它。我有两个按钮,一个添加一个标记,一个删除标记。将AJAX数据发送到错误的Django视图

这里是views.py

@csrf_exempt 
def save(request): 
    searchVar = request.POST.getlist('search[]') 
    waypoint = Waypoint() 
    waypoint.name = searchVar[0] 
    waypoint.geometry = ('POINT(' + searchVar[2] + " " + searchVar[1] + ')') 
    waypoint.save() 
    return HttpResponse(json.dumps(dict(isOk=1)), content_type='application/json') 

@csrf_exempt 
def remove(request): 
    objectID = request.POST.get('id') 
    point = get_object_or_404(Point, pk = objectID) 
    point.delete() 

这里是urls.py

from django.conf.urls import patterns, url, include 

urlpatterns = patterns('googlemaps.waypoints.views', 
    url(r'^$', 'index', name='waypoints-index'), 
    url(r'', 'save', name='waypoints-save'), 
    url(r'', 'remove', name='waypoints-remove'), 
) 

,这里是从JS ajax的文件

$('#saveWaypoints').click(function() { 
    var searchList = [search.name, search.geometry.location.lat(), search.geometry.location.lng()] 
    $.ajax({ 
     url : "waypoints-save", 
     type : "POST", 
     data : { search : searchList } 
    }, function (data) { 
     if (data.isOk) { 
      $('#saveWaypoints'); 
     } else { 
      alert(data.message); 
     } 
    }); 
}); 
$('#removeWaypoints').click(function() { 
    console.log(markerID); 
    $.ajax({ 
     url : "waypoints-remove", 
     type : "POST", 
     data : { id : markerID } 
    }, function (data) { 
     if (data.isOk) { 
      $('#removeWaypoints'); 
     } else { 
      alert(data.message); 
     } 
    }); 
}); 

保存按钮作品好,但是当我点击删除按钮时,我的控制台日志中出现这个错误

POST http://127.0.0.1:8000/waypoints-remove 500 (Internal Server Error) 

IndexError at /waypoints-remove 
list index out of range 

Request Method: POST 
Request URL: http://127.0.0.1:8000/waypoints-remove 

这个错误在我的服务器CMD

Internal Server Error: /waypoints-remove 
Traceback (most recent call last): 
    File "C:\Users\rnvitter\virtualenv4\myvenv\lib\site-packages\django\core\handlers\base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "C:\Users\rnvitter\virtualenv4\myvenv\lib\site-packages\django\core\handlers\base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "C:\Users\rnvitter\virtualenv4\myvenv\lib\site-packages\django\views\decorators\csrf.py", line 58, in wrapped_view 
    return view_func(*args, **kwargs) 
    File "C:\Users\rnvitter\virtualenv4\googlemaps\googlemaps\waypoints\views.py", line 23, in save 
    waypoint.name = searchVar[0] 
IndexError: list index out of range 
2017-01-09 22:40:11,781 - ERROR - Internal Server Error: /waypoints-remove 
Traceback (most recent call last): 
    File "C:\Users\rnvitter\virtualenv4\myvenv\lib\site-packages\django\core\handlers\base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "C:\Users\rnvitter\virtualenv4\myvenv\lib\site-packages\django\core\handlers\base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "C:\Users\rnvitter\virtualenv4\myvenv\lib\site-packages\django\views\decorators\csrf.py", line 58, in wrapped_view 
    return view_func(*args, **kwargs) 
    File "C:\Users\rnvitter\virtualenv4\googlemaps\googlemaps\waypoints\views.py", line 23, in save 
    waypoint.name = searchVar[0] 
IndexError: list index out of range 

这使我相信,从删除按钮AJAX调用数据被发送到我保存视图,没有人知道吗?

+0

在js文件中,您定义的url不起作用。您必须在html页面中定义ajax,并在ajax中使用URL的语法:url:“{%url”waypoints-save'%}“,自动创建URL和您的ajax将采用正确的方法并使用django最新的方式来定义urls.py文件中的url没有模式https://docs.djangoproject.com/zh/1.10/topics/http/urls/#example –

回答

3

你有你的urls.py文件设置错误。第一个参数是一个匹配URL的正则表达式,因此^$将匹配根路径。 name参数用于获取特定视图的URL,例如当您使用reverse功能时。

^指示行的开始,并且$指示行的结束。两者之间没有任何关系,它将匹配一条空行。

要匹配另一个URL,例如/waypoints-save/,您需要编写另一个正则表达式:^/waypoints-save/$。这将匹配行的开头,后面跟着字符/waypoints-save/,后面是行的结尾。为了让您的整个urls.py设置正确,它应该是这样的:

from django.conf.urls import patterns, url, include 

urlpatterns = patterns('googlemaps.waypoints.views', 
    url(r'^$', 'index', name='waypoints-index'), 
    url(r'^/waypoints-save/$', 'save', name='waypoints-save'), 
    url(r'^/waypoints-remove/$', 'remove', name='waypoints-remove'), 
) 
+0

做了这个伎俩,我很困惑如何在django工作的网址,但这有助于很多谢谢你! – captnvitman

2

您已经定义了具有相同的正则表达式2个URL条目。

url(r'', 'save', name='waypoints-save'), 
url(r'', 'remove', name='waypoints-remove'), 

由于​​将匹配r''(有没有在这一个正则表达式,所以它会匹配任何东西),第一场比赛的胜利,并执行save方法。因此,您预计运行的方法remove未运行。