使用 DRF ModelViewSet 和 TemplateHTMLRenderer 时如何访问模板中的数据?

2023-11-28

我有一个 Django Rest 框架ModelViewSet我正在尝试使用TemplateHTMLRenderer显示 HTML。跟随在tutorial:

from rest_framework import permissions, renderers, viewsets
from rest_framework.decorators import link

from . import models, serializers
from .permissions import IsOwnerOrReadOnly


class SnippetViewSet(viewsets.ModelViewSet):
    template_name = 'snippet-list.html'
    queryset = models.Snippet.objects.all()
    serializer_class = serializers.SnippetSerializer
    renderer_classes = (renderers.TemplateHTMLRenderer,)
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,
                          IsOwnerOrReadOnly,)

    @link(renderer_classes=[renderers.StaticHTMLRenderer])
    def highlight(self, request, *args, **kwargs):
        snippet = self.get_object()
        return Response(snippet.highlighted)

    def pre_save(self, obj):
        obj.owner = self.request.user

如果我添加一个键def resolve_context()我可以访问模板中传递到的模型对象RequestContext。如果我不添加datakey 那么我不知道如何访问代码片段。

def resolve_context(self, data, request, response):
    if response.exception:
        data['status_code'] = response.status_code

    #return RequestContext(request, data)  # original source on github
    return RequestContext(request, {'data': data})  # if I add a key I can access it

所以我必须错过一些简单的东西,或者我期望它的表现不是作者的意图?


我会这样走:

class SnippetViewSet(viewsets.ModelViewSet):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer
    renderer_classes = (renderers.JSONRenderer, renderers.TemplateHTMLRenderer)

    def list(self, request, *args, **kwargs):
        response = super(SnippetViewSet, self).list(request, *args, **kwargs)
        if request.accepted_renderer.format == 'html':
            return Response({'data': response.data}, template_name='home.html')
        return response

and use http://127.0.0.1:8000/snippets/.html获取表格(或您使用的任何后缀)。

这样您就不会覆盖每种渲染类型的解析器。

其他解决方案是仅为列表操作创建专用视图并仅使用 HTML 渲染器。但这样你就会有少量的代码重复。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 DRF ModelViewSet 和 TemplateHTMLRenderer 时如何访问模板中的数据? 的相关文章

随机推荐

  • Jackson 反序列化 - 包含 ArrayList

    再会 我目前正在集成尝试使用使用 Jackson 使用 Jersey 生成 JSON 用 NET 编写 的 REST 服务 JSON 由可能的错误消息和对象数组组成 下面是 Jersey 日志过滤器生成的返回 JSON 的示例 error
  • C++的new操作是否能保证地址返回的对齐?

    大多数有经验的程序员都知道数据对齐对于程序的性能很重要 我见过一些程序员编写的程序分配的缓冲区大小超出了他们的需要 并使用对齐的指针作为开始 我想知道我是否应该在我的程序中这样做 我不知道 C 的新操作返回的地址是否有任何对齐保证 所以我写
  • Intellij IDEA 2017.2 无法在 Linux Mint 18 上添加 openjk 9

    我在用Intellij IDEA 2017 2 5 on Linux 薄荷 18 2并尝试添加新的 openjdk 9SDK但 IDEA 不接受 openjdk 9 作为有效的 JDK 我已经使用 ppa 标准存储库中的 apt get 安
  • 等待/通知和等待/中断有什么区别?

    synchronized Foo class while someCondition try Foo class wait catch InterruptedException e e printStackTrace 看来这个线程在其他线程
  • 如何将具有有效 Erlang 表达式的字符串转换为抽象语法树(AST)?

    我想将包含有效 Erlang 表达式的字符串转换为其抽象语法树表示形式 但到目前为止没有成功 下面是我想做的一个例子 编译完成后 全部z z 生成模块zed 通过调用zed zed 返回申请结果lists reverse在给定的列表上 mo
  • Haskell int 列表转字符串

    我想知道有没有简单的方法可以转 5 2 10 into 52a 不仅仅是这种情况 我想将任何 gt 9的数字与相应的字母相关联 提前致谢 您想要对列表中的每个元素执行某些操作以获得新列表 换句话说 您想要对每个元素应用一个函数 您必须自己定
  • intel/64位win7上是否可以在32位应用程序中使用64位指令

    我的环境是64位win7 VC2010 当然 里面的intel是64位CPU 我可以在 32 位应用程序中使用 64 位指令 本机机器字 64 位 吗 由于我的大部分代码都是 32 位的 因此我不想将其移植到 64 位 对于一些性能关键的热
  • WPF 中的棋盘

    多年来我一直使用 Winforms 进行开发 现在我想切换到 WPF 并制作一个棋盘 不幸的是我不知道从哪里开始 使用 WPF 让我非常不确定 我感觉自己又像个菜鸟了 有人可以概述一下基本设计吗 我想我会从 8x8 网格开始 使用矩形作为正
  • 我可以同时使用命令行 Git 工具和 TortoiseGit 吗?

    有时 使用 git bash 比使用 TortoiseGit 更详细且更容易获取有关 git 的信息 因此 我想使用 git bash 来解决非常具体的问题 例如 同时创建分支 签出并提交未提交的更改 git checkout b my n
  • 将 ANTLR 4 集成到 C++ 应用程序中

    Recently I picked up a copy of The Definitive ANTLR 4 Reference and since I am sophisticated when it comes to working wi
  • 函数式编程:副作用

    大多数教程 文章 书籍都会讨论函数式编程时的副作用 采取这个Python代码 def isPrime n k 2 while k lt n if n k 0 return False k 1 return True 文中说上面的函数有局部副
  • 为什么CALL会在这个脚本中打印GOTO帮助消息?为什么之后的命令会执行两次?

    这是一个有趣的话题 我尝试着研究那里讨论的两件事 您可以通过双扩展访问带有特殊符号的标签 标签包含 无法使用 因为GOTO and CALL打印他们的帮助消息而不是执行 结果如下 echo off setlocal enableDelaye
  • 参数和参数之间的区别[重复]

    这个问题在这里已经有答案了 参数 和 参数 之间有区别吗 或者它们只是同义词 论证通常用于以下含义 实际论证 vs 形式参数 The 形式参数是函数声明 定义 原型中给出的内容 而实际论证是调用函数时传递的内容 如果您愿意的话 可以是形式参
  • epoll 是否保留 fd 的注册顺序?

    我正在研究 Linux 系统调用 我发现了一些方面epoll 我不清楚 说 我创建一个epoll实例 epollfd epoll create 50 接下来 我在中注册 50 个文件描述符for loop for i 0 i lt 50 i
  • Flex:防止滚动条自动显示时覆盖内容

    我在Flex中有一个画布 只能在垂直方向滚动 所以我将画布的属性设置如下 verticalScrollPolicy auto horizontalScrollPolicy off 这里的问题是垂直滚动条在出现时覆盖了内容 尽管还有足够的水平
  • AJAX 和 NS_ERROR_DOM_BAD_URI 错误

    我一直遇到以下问题 我认为这可能是由于我的方法可能被误导 但希望在您的帮助下我可以解决这个问题 基本上 对于我的网站 我有一个搜索提供商 已付费 所以我没有违反任何使用条款 提交搜索表单后 我将被定向到显示结果的域 虽然我可以自定义返回结果
  • JQuery Ajax 调用给出 404 'Resource Not Found' 错误,但正常的 URL 调用没问题

    在 ASP NET MVC 项目中使用 JQuery 调用时 我遇到了一个奇怪的问题 我发现 Ajax 调用给出 404 资源未找到错误 但是当我使用通常的 URL GET 调用时 我可以成功调用服务器 没有任何问题 知道为什么会这样吗 这
  • Java-获取当前计算机的声音输出

    有没有办法从计算机的默认音频输出中获取声音 我不想操纵它 我只想对频率进行视觉表示 很像均衡器 这个问题是重复的 实时音频可视化 Java java 声音 API 允许您与当前的音频输出进行交互 您可以在这里找到参考 http www ja
  • 无法在多风格应用程序中构建功能模块

    我在 Android Studio 3 1 1 上使用 Gradle 4 4 和 Gradle Android 插件 3 1 1 我有 2 种风格 a 和 b 由于以下错误 我无法构建我的项目 Cannot choose between t
  • 使用 DRF ModelViewSet 和 TemplateHTMLRenderer 时如何访问模板中的数据?

    我有一个 Django Rest 框架ModelViewSet我正在尝试使用TemplateHTMLRenderer显示 HTML 跟随在tutorial from rest framework import permissions ren