【发布时间】:2014-09-06 03:17:31
【问题描述】:
为什么我不能使用带有 $http 的参数或数据与 Django 通信?
我有一个从 django 视图获取数据的 angularjs 页面。在一种情况下,我有一个名为 /display 的 django 视图,它从服务器上抓取一个文件并将其显示为纯文本。
this.loadfile = function (clickedItem) {
$http({method: 'GET' , url: '/display/'+ clickedItem.fileName})
.success(function(data) {
$scope.fileView.text = data;
});
};
调用 /display/myfile.txt 效果很好,因为文件名是一个简单的字符串,返回的数据也是如此。
现在我需要向 django 发送一个更复杂的多行参数:一个 searchStrings 列表和一个文件名列表:
this.concord = function (searchStrings, filenames) {
$http({method: 'GET' ,
url: '/concord/',
data: {"searchStrings":searchStrings, "filenames":filenames}
)
.success(function(data) {
console.log(data); // log the data coming back.
$scope.concord = data;
});
};
根据AngularJS - Any way for $http.post to send request parameters instead of JSON?,应该可以使用
url(r'^concord/(?P<jsondata>.*)$', views.concord, name="concord"),
我的观点在哪里:
def concord(request,jsondata) :
jObj=simplejson.loads(jsondata)
return HttpResponse(jObj["files"])
(我也尝试解析 request.body;为空)
另一方面,如果我明确地将它附加到 url,我确实会得到一些回报:
$http({method: 'GET',
url: '/concord/'+JSON.stringify({"searchStrings":searchStrings, "filenames":filenames}),
}
)
.success(function(data) {
console.log(data);
$scope.concordResults = data;
});
这行得通!
但我必须以最糟糕的方式这样做。有没有办法使用参数或数据与 Django 进行通信?
(PS:我已经避免使用 django-angular 包,因为我已经被学习包淹没了:django rest、angular、bootstrap 等......我真的只想从 angular 和 django 之间的基本通信开始。稍后我会深入研究更多的包。)
【问题讨论】:
-
谢谢——我已经开始阅读,但显然还不足以理解发布/获取的内容。