【问题标题】:DjangoRestFramework - How to send JSON object and HTML Template to the front-end at the same time?DjangoRestFramework - 如何将 JSON 对象和 HTML 模板同时发送到前端?
【发布时间】:2016-02-08 22:03:47
【问题描述】:

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

/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,)

假设“用户”是一个 JS 对象,我计划通过使用 AngularJS 向以下 URL 发送一个获取请求来使用我的 DRF API:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我不确定它是否有可能以您当前的方式工作,因为第一个遇到的 URL 将始终将您定向到 UserPageView

    不过,也许你应该看看DRF's format_suffixes

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多