与AngularJS一起使用时,Django模板不呈现JSON响应

时间:2016-06-14 03:16:57

标签: angularjs json django-templates django-views angularjs-ng-repeat

编辑:已解决

views.py

def post_list(request):
queryset = Post.objects.all()
json_data = serializers.serialize('json', queryset)

context = {
    "jsondata" : json_data,
}

return render(request,"index.html", context)

的index.html

<script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/1.11.8/semantic.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>

<body ng-app="myapp" ng-controller="myctrl">

    {{ jsondata }}

    <div class="ui icon input">
        <input type="text" ng-model="search" placeholder="Search skills...">
        <i class="search link icon"></i>
    </div>


    <div class="ui link cards" style="padding:40px">

        <div class="card">

            <div class="image">
                <img class="ui avatar centered image" src="http://1.semantic-ui.com/images/avatar/large/elliot.jpg">
            </div>

            <div class="content">

                <div class="ui small header" ng-repeat="skill in skills | filter:search">
                    {{ skill.fields.post_title}}
                </div>

                <div class="description">
                    {{ skill.fields.post_content }}
                </div>

            </div>
        </div>
    </div>

    <script type="text/javascript">
        var skills_list = "{{ jsondata }}";

        var nice_data = JSON.parse(skills_list.replace(/&quot;/g, '"'))

        var very_nice_data = JSON.stringify(nice_data);

        console.log(very_nice_data)
    </script>
    <script>
        angular.module('skillboard', []).controller('searchskills', function ($scope) {
            $scope.skills = very_nice_data;
        });
    </script>
</body>

控制台中**very_nice_data**的输出为:

[
  {
    "model": "posts.post",
    "pk": 1,
    "fields": {
      "post_title": "Algorithms",
      "post_content": "Calling it.",
      "updated_on": "2016-06-12T09:09:45.198Z",
      "timestamp": "2016-04-20T09:44:21.887Z",
      "test_type": "Coding",
      "number_of_questions": 0,
      "test_url": "http://example.com"
    }
  },
  {
    "model": "posts.post",
    "pk": 4,
    "fields": {
      "post_title": "Data Structures",
      "post_content": "new content here",
      "updated_on": "2016-06-12T09:09:26.359Z",
      "timestamp": "2016-04-26T06:28:32.569Z",
      "test_type": "Coding",
      "number_of_questions": 0,
      "test_url": "http://example.com"
    }
  },
  {
    "model": "posts.post",
    "pk": 11,
    "fields": {
      "post_title": "Dynamic Programming",
      "post_content": "This level of DP is well suited for 2+ yr experience programmers/researchers.",
      "updated_on": "2016-06-12T09:09:16.542Z",
      "timestamp": "2016-06-12T08:44:25.705Z",
      "test_type": "Coding",
      "number_of_questions": 0,
      "test_url": "#"
    }
  }
]

我正在尝试使用angular将我的django视图中的JSON响应渲染到我的模板中。我正在为每个项目使用语义卡。 JSON响应非常好。 ng-repeat也会循环播放JSON中的项目数,但 post_title 并且 post_content 未显示。

<div class="ui small header" ng-repeat="skill in skills | filter:search">
    {{ skill.fields.post_title }}
</div>

<div class="description">
    {{ skill.fields.post_content }}
</div>

错误在哪里?请帮忙。

3 个答案:

答案 0 :(得分:0)

不要将very-nice_data字符串化。

当你执行$scope.skills = very_nice_data;

时,它必须是javscript数组而不是json字符串

答案 1 :(得分:0)

Charlieftl回答的是完美的。而不仅仅是var very_nice_data = JSON.stringify(nice_data); var very_nice_data = nice_data;

&#13;
&#13;
var app = angular.module("skillboard", []);

app.controller("searchskills", function($scope) {
  $scope.skills = very_nice_data;
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>


<div ng-app="skillboard" ng-controller="searchskills">
  <div class="ui small header" ng-repeat="skill in skills | filter:search">
    {{ skill.fields.post_title }}
  </div>
</div>

<script type="text/javascript">
  var skills_list = '[{"model":"posts.post","pk":1,"fields":{"post_title":"Algorithms","post_content":"Calling it.","updated_on":"2016-06-12T09:09:45.198Z","timestamp":"2016-04-20T09:44:21.887Z","test_type":"Coding","number_of_questions":0,"test_url":"http://example.com"}},{"model":"posts.post","pk":4,"fields":{"post_title":"Data Structures","post_content":"new content here","updated_on":"2016-06-12T09:09:26.359Z","timestamp":"2016-04-26T06:28:32.569Z","test_type":"Coding","number_of_questions":0,"test_url":"http://example.com"}},{"model":"posts.post","pk":11,"fields":{"post_title":"Dynamic Programming","post_content":"This level of DP is well suited for 2+ yr experience programmers/researchers.","updated_on":"2016-06-12T09:09:16.542Z","timestamp":"2016-06-12T08:44:25.705Z","test_type":"Coding","number_of_questions":0,"test_url":"#"}}]'

  var nice_data = JSON.parse(skills_list.replace(/&quot;/g, '"'))

  var very_nice_data = nice_data;
</script>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

最后解决问题。我遇到了以下问题:

django和角度视图绑定的花括号中存在冲突。所以我在下面创建了自定义绑定。

$('a[data-module]').click(function(event) {
	event.preventDefault();
	var module = $(this).attr('data-module');
	alert(module);
});