我用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
这个视图允许我通过指定format=json或html从同一个端点获取JSON数据或HTML表单。
我希望以编程方式调用该视图以从另一个视图中获取呈现的HTML表单,以便将此表单包含在将包含更多内容的另一个页面中。
5条答案
按热度按时间sirbozc51#
我在文档中找到了解决方案... https://docs.djangoproject.com/en/4.1/ref/class-based-views/mixins/
这里的提示是从他们的例子中得来的:
hl0ma9xz2#
或
w8f9ii693#
从Django 2.2和DRF 3.9.2开始,我可以使用下面的代码得到响应。
以上示例解决了以下问题:
request
参数必须是django.http.HttpRequest
的示例,而不是rest_framework.request.Request
data
属性而不是content
,可以从该视图获得结果。pkbketx94#
一些答案的语法让我感到困惑,尽管Django文档是这样解释的:
https://docs.djangoproject.com/en/4.1/ref/class-based-views/base/#django.views.generic.base.View.as_view
我的小脑袋瓜比较容易理解这个问题:
vh0rcniy5#
如果我没理解错的话,你需要从视图B中得到结果,而视图A内部。
使用requests/urllib 2和json库应该可以解决您的问题(如this answer中所指定)。
要获取URL,可以使用 request.get_absolute_uri() 和/或 request.get_host() 和 django.core.urlresolvers.reverse 的组合。