Sco*_*all 8 django django-rest-framework
我有一个Django Rest Framework ModelViewSet,我正在尝试使用它TemplateHTMLRenderer来显示HTML.继续在教程中:
from rest_framework import permissions, renderers, viewsets
from rest_framework.decorators import link
from . import models, serializers
from .permissions import IsOwnerOrReadOnly
class SnippetViewSet(viewsets.ModelViewSet):
template_name = 'snippet-list.html'
queryset = models.Snippet.objects.all()
serializer_class = serializers.SnippetSerializer
renderer_classes = (renderers.TemplateHTMLRenderer,)
permission_classes = (permissions.IsAuthenticatedOrReadOnly,
IsOwnerOrReadOnly,)
@link(renderer_classes=[renderers.StaticHTMLRenderer])
def highlight(self, request, *args, **kwargs):
snippet = self.get_object()
return Response(snippet.highlighted)
def pre_save(self, obj):
obj.owner = self.request.user
Run Code Online (Sandbox Code Playgroud)
如果我添加一个键,def resolve_context()我可以访问模板中传递给的模型对象RequestContext.如果我不添加data密钥,那么我不知道如何访问代码片段.
def resolve_context(self, data, request, response):
if response.exception:
data['status_code'] = response.status_code
#return RequestContext(request, data) # original source on github
return RequestContext(request, {'data': data}) # if I add a key I can access it
Run Code Online (Sandbox Code Playgroud)
所以我必须要错过一些简单的东西,或者我期望这样做是不是作者的意图?
mar*_*dev 12
我会这样走:
class SnippetViewSet(viewsets.ModelViewSet):
queryset = Snippet.objects.all()
serializer_class = SnippetSerializer
renderer_classes = (renderers.JSONRenderer, renderers.TemplateHTMLRenderer)
def list(self, request, *args, **kwargs):
response = super(SnippetViewSet, self).list(request, *args, **kwargs)
if request.accepted_renderer.format == 'html':
return Response({'data': response.data}, template_name='home.html')
return response
Run Code Online (Sandbox Code Playgroud)
并用于http://127.0.0.1:8000/snippets/.html获取表格(或您使用的任何后缀).
这样,您不会为每种渲染类型覆盖解析器.
其他解决方案是仅为列表操作创建专用视图,并仅使用HTML渲染器.但是你会有一个小代码重复.
| 归档时间: |
|
| 查看次数: |
4195 次 |
| 最近记录: |