2014-11-06 6 views
25

मैं Django बाकी ढांचे (डीआरएफ) के साथ बनाया गया निम्नलिखित सामान्य वर्ग आधारित विचारोंकिसी अन्य दृश्य के भीतर प्रोग्रामेटिक रूप से Django Rest Framework दृश्य को कैसे कॉल करें?

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 निर्दिष्ट करने के द्वारा एक ही endpoint से दोनों JSON डेटा या HTML प्रपत्र प्राप्त करने के लिए अनुमति देते हैं।

मैं इस दृश्य को किसी अन्य पृष्ठ में शामिल करने के लिए प्रस्तुत किए गए HTML फॉर्म को प्राप्त करने के लिए को प्रोग्रामेटिक रूप से कॉल करना चाहता हूं जिसमें अधिक सामग्री शामिल होगी।

उत्तर

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

या

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

अनुरोध क्या है? , और अगर मैं एक ipython खोल में हूँ –

23

मैं दस्तावेज में इस बात के लिए समाधान नहीं मिला ... 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

अगर मैं सही ढंग से समझने रहा हूँ, आप दृश्य से परिणाम प्राप्त करने की आवश्यकता बी, जबकि दृश्य ए के अंदर

अनुरोध का उपयोग करना/urllib2 और json पुस्तकालयों को आपकी समस्या का समाधान करना चाहिए (जैसा कि this answer में निर्दिष्ट है)।

यूआरएल पाने के लिए आपको request.get_absolute_uri का एक संयोजन() और/या request.get_host() का उपयोग कर सकते और django.core.urlresolvers.reverse।