Подтвердить что ты не робот

Как программно вызывать представление Django Rest Framework в другом представлении?

У меня есть следующие общие представления, основанные на классе, построенные с помощью рамки Django Rest (DRF)

class ExampleDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Example.objects.all()
    serializer_class = ExampleSerializer
    renderer_classes = (JSONRenderer, TemplateHTMLRenderer)

    def get(self, request, *args, **kwargs):

        response = self.retrieve(request, *args, **kwargs)
        if request.accepted_renderer.format == 'html':
            form = ExampleForm(data=response.data)
            return Response({'data': response.data, 'form': form}, template_name='example.html')

        return response

Это представление позволяет мне получить как данные JSON, так и HTML-форму с той же конечной точки, указав формат = json или html.

Я хотел бы программным способом вызывать этот вид, чтобы получить визуализированную HTML-форму из другого представления, чтобы включить эту форму на другую страницу, которая будет содержать больше вещей.

4b9b3361

Ответ 1

html_from_view = ExampleDetail.as_view({'get': 'list'})(request).content

ИЛИ

html_from_view = ExampleDetail.as_view({'get': 'retrieve'})(request, pk=my_id).render().content

Ответ 2

Я нашел решение для этого в документации... https://docs.djangoproject.com/en/1.7/topics/class-based-views/mixins/

Подсказка из приведенного здесь примера:

class AuthorDetail(View):

    def get(self, request, *args, **kwargs):
        view = AuthorDisplay.as_view()
        return view(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        view = AuthorInterest.as_view()
        return view(request, *args, **kwargs)

Ответ 3

Если я правильно понимаю, вам нужно получить результат из вида B, в то время как внутри A.

Использование библиотек запросов/ urllib2 и json должно решить вашу проблему (как указано в этот ответ).

Чтобы получить URL-адрес, вы можете использовать комбинацию request.get_absolute_uri() и/или request.get_host() и django.core.urlresolvers.reverse.