Django / AngularJS:如何从我的AngularJS脚本中访问我的Python上下文项

时间:2017-10-16 02:07:55

标签: javascript python angularjs json django

美好的一天!我是初学者,在使用AngularJS作为我的前端Firebase聊天系统时尝试了Django项目。以下是我就此项目提出的上一个问题:Firebase/Angular: Messages not showing in HTML, but contain the message objects

我知道在使用django / python时直接在你的html上使用json变量是不明智的,但是碰巧我的firebase聊天模块正在使用angularJS(我不知道如何编写这个聊天函数的代码) django ..),我的angularJS代码需要从View.py访问我的Django的上下文查询集。

我有什么方法可以:

  1. 将json项目推送到我的HTML / Template中,就像我推送上下文一样 从Views.py到我的HTML /模板的信息,并在我的 AngularJS脚本?
  2. 从Views.py?
  3. 中的Context访问我的Django / Python数据集

    这是我的firebase的AngularJS代码:

    var app = angular.module('chatApp', ['firebase']);
    
    app.controller('ChatController', function($scope, $firebaseArray) {
    
        //I want to populate the crisis and sender variables  with something from my context 
        //from Views.py.. Inside planList
    
        var crisis = "Crisis1"; 
        var sender = "Sender1";
    
        //Query
    
        var ref = firebase.database().ref().child(crisis).child('CMO-PMO');
    
        $scope.messages = $firebaseArray(ref);
    
        $scope.send = function() {
            $scope.messages.$add({
                sender: sender,
                message: $scope.messageText,
                date: Date.now()
            })
        }
    })
    

    这是我的Views.py代码:

    def home(request):
        template = loader.get_template('app/home.html')
        planList = Plan.objects.filter(plan_crisisID__crisis_status='Ongoing')
    
        context = {        
            'planList': planList
        }
        return HttpResponse(template.render(context, request))
    

    我的AngularJS代码(危机和发送者)中所需的两个变量都来自planList上下文。

    我有什么方法可以达到这个目的吗?请给我一些帮助..非常感谢你,我非常感谢:)如果需要,我很乐意提供任何其他信息,并会及时回复!

1 个答案:

答案 0 :(得分:0)

我认为使用API​​会更好。您可以非常轻松地使用DRF创建API。例如:

# Serializer
class SomeSerializer(serializers.ModelSerializer):
   class Meta:
        model = Plan
        fields = ('model_fields',)

# Views:
from rest_framework import generics


Class SomeView(generics.ListView):
      queryset = Plan.objects.all()
      serializer_class = SomeSerializer


# urls

url(r'^plans$', SomeView.as_view()),

在Angular JS中,如果您使用angular-resource,则可以通过以下方式获取数据:

res = $resource('/plans')
res.query().$promise.then(function(data) {
    console.log(data)},  // You get your data in here
    function(error) {
    console.log(error)}
)