为什么AngularJS将DRF API返回的整数“3”读为“%203”?

时间:2017-05-10 01:05:17

标签: angularjs django django-rest-framework django-serializer

这是我在class PostViewSet(mixins.CreateModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, mixins.DestroyModelMixin, GenericViewSet): serializer_class = PostSerializer permission_classes = (IsAuthenticated, IsActualOwnerDelete,) def get_queryset(self): # new posts from location. return Post.objects.filter(location=self.request.user.userextended.location).order_by('-createdAt') def perform_create(self, serializer): serializer.save(actualOwner=self.request.user) @list_route(permission_classes=[IsAuthenticated]) def mymostrecent(self, request): me = request.user try: # this gets the most recent post's ID post = me.post_mine_set.latest('id') did = post.id except Post.DoesNotExist: did = 0 return Response(did) 调用的DRF视图:

/posts/mymostrecent

现在使用Angular,当我访问网址return $http.get("/api/posts/mymostrecent") .then(function(response) { console.log(response); $location.url('/posts/ ' + response.data); }) 时:

Object {data: 3, status: 200, config: Object, statusText: "OK"}

记录的是:

/posts/%203

但网址变为:

%20

它仍然有效并显示正确的html页面,但如何摆脱URL中的models.py

这是我class Post(models.Model): owner = models.ForeignKey(User) usersVoted = models.ManyToManyField(User, blank=True, related_name="%(class)s_voted_set") post = models.CharField(max_length=400) createdAt = models.DateTimeField(auto_now_add=True, blank=True) actualOwner = models.ForeignKey(User, related_name="%(class)s_mine_set") (可能不需要):

#pragma omp parallel num_threads(comm_sz, number, BLOCK_LOW, BLOCK_HIGH, a[n], first, difference, global_sum1)

1 个答案:

答案 0 :(得分:4)

问题在于这段代码,你在这一行添加了一个额外的空格$location.url('/posts/ ' + response.data);

return $http.get("/api/posts/mymostrecent")
 .then(function(response) {
     console.log(response);
    $location.url('/posts/' + response.data); #Removed the space after '/posts/ ' ie. change '/posts/ ' to '/posts/'
 })