DjangoRestFramework - 如何同时将JSON对象和HTML模板发送到前端?

时间:2015-11-07 23:44:51

标签: json django django-rest-framework html-rendering

我想要的是,如果用户访问此网址:

/user/22

然后前端应该为pk值为22的用户呈现HTML页面。这是我的URLs.py:

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)

urlpatterns = [
    url(r'^user/(?P<pk>[0-9]+)$', views.UserPageView.as_view()),
    url(r'^', include(router.urls)),
]

这是UserPageView:

class UserPageView(generics.RetrieveAPIView):
    queryset = User.objects.all()
    renderer_classes = (TemplateHTMLRenderer,)

    def get(self, request, *args, **kwargs):
        self.user = self.get_object()
        return Response({'user': self.user}, template_name='user.html')

这是我的UserViewSet:

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = (IsCreationOrAuthenticated, IsWatchOrOwnerOrReadOnly,)

假设&#39;用户&#39;是一个JS对象,我打算使用我的DRF API,通过使用AngularJS将get请求发送到以下URL:

("/users/" + user.pk) // which leads to UserViewSet (which serializes the user object)

获取该特定用户的信息。但是,user不是JSON对象,它是一个Django变量,我可以使用Django模板标签在模板中使用它,如:{{ user }}

如何获取DRF视图以将JSON返回到HTML模板?对我来说最好的方法是什么?提前谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定它是否有可能以您当前的方式运作,因为首次遇到的网址将始终指引您UserPageView

但是,也许你应该看看DRF's format_suffixes

使用其他格式,您可以指定是否要获取用户对象的JSON或HTML表示。