【发布时间】:2020-09-28 07:11:27
【问题描述】:
我正在使用 Django REST Framework,发现自己处于以下情况:我有两个 APIViews,除了它们返回的对象的顺序之外,它们彼此相同:
# Route: "/new"
class NewView(APIView):
"""
Returns JSON or HTML representations of "new" definitions.
"""
renderer_classes = [JSONRenderer, TemplateHTMLRenderer]
def get(self, request):
# Queryset
definitions = Definition.objects.filter(language=get_language())
definitions = definitions.order_by("-pub_date")
# HTML
if request.accepted_renderer.format == "html":
context = {}
context["definitions"] = definitions
context["tags"] = get_tags(definitions)
return Response(context, template_name="dictionary/index.html")
# JSON
serializer = DefinitionSerializer(definitions, many=True)
return Response(serializer.data)
# Route: "/random"
class RandomView(APIView):
"""
Returns JSON or HTML representations of "random" definitions.
"""
renderer_classes = [JSONRenderer, TemplateHTMLRenderer]
def get(self, request):
# Queryset
definitions = Definition.objects.filter(language=get_language())
definitions = definitions.order_by("?")
# HTML
if request.accepted_renderer.format == "html":
context = {}
context["definitions"] = definitions
context["tags"] = get_tags(definitions)
return Response(context, template_name="dictionary/index.html")
# JSON
serializer = DefinitionSerializer(definitions, many=True)
return Response(serializer.data)
如您所见,这两个视图之间唯一改变的行是对Definition 对象排序的行。 如何创建包含共享代码的父视图和对对象进行排序的子视图?
【问题讨论】:
标签: django inheritance django-rest-framework django-views