我正在尝试创建一个视图,如果没有另外指定,则返回常规的html响应。我正在使用django的rest_framework来根据请求返回JSON。
除了我想在模板中访问我的上下文的部分外,一切正常。
这是基于图片的小代码示例:
@api_view(('GET', ))
@renderer_classes((TemplateHTMLRenderer, UnicodeJSONRenderer, JSONRenderer, BrowsableAPIRenderer))
def index(request):
queryset = Picture.objects.all()
page = request.GET.get('page')
paginator = Paginator(queryset, 25)
try:
pictures = paginator.page(page)
except PageNotAnInteger:
pictures = paginator.page(1)
except EmptyPage:
pictures = paginator.page(paginator.num_pages)
serializer_context = {'request': request, 'pictures': pictures, 'filter': FilterForm()}
serializer = PaginatedPictureSerializer(pictures, context=serializer_context)
return Response(serializer.data, template_name='index.html')
当我想在模板中访问我的上下文时新建:
{% if pictures %}
{% for picture in pictures %}
...
{% endfor %}
{% else %}
<p>No pictures are available.</p>
{% endif %}
结果总是:没有图片可用(并且说明同样的说法)。
修改 按要求
class PictureSerializer(serializers.ModelSerializer):
class Meta:
model = Picture
class PaginatedPictureSerializer(pagination.PaginationSerializer):
class Meta:
object_serializer_class = PictureSerializer
答案 0 :(得分:1)
呈现多个上下文项的问题是您无法访问模板内的键。你需要对它进行一点点破解。
我已经回答了relevant SO question,这解决了这个问题。所以基本上你做了:
serializer_context = {'request': request, 'pictures': pictures, 'filter': FilterForm()}
if request.accepted_renderer.format == 'html':
return Response(serializer_context, template_name='index.html')
serializer = PaginatedPictureSerializer(pictures, context=serializer_context)
return Response(serializer.data, template_name='index.html')