我正在使用 Django Rest Framework 3.11.0,我想使用 BrowsableAPIRenderer 和自定义模板来呈现实例的详细信息。我只想覆盖 dict/json 的渲染,在下图中标记为红色,我想保留其余所有内容。
通过覆盖,restframework/api.html我只能更改标题、标题和一些字段,但我没有找到一种方法来呈现实例的详细信息,例如在表格中。有没有办法做到这一点?
澄清:我有带有大型字典的模型,我想将它们显示得比内联字符串更漂亮。我认为当我找到如何定制(已经很漂亮的)Django RestFramework BrowsableAPI 时,我也将能够解决我的问题。
(如果您想解决类似的问题,请查看我的更新 2。)
这是我从 Bedilbeks 得到的答案(直到第一次更新)。
我不想更改所有视图,因此我不会全局注册渲染器。
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
# 'users.renderers.CustomBrowsableAPIRenderer',
]
}
Run Code Online (Sandbox Code Playgroud)
相反,我将设置renderer_classes为 myUserViewSet并在此处使用 my CustomBrowsableAPIRenderer。
class UserViewSet(GenericViewSet, ListModelMixin, RetrieveModelMixin):
queryset = UserModel.objects.all()
serializer_class = UserSerializer
renderer_classes = [renderers.JSONRenderer, CustomBrowsableAPIRenderer]
Run Code Online (Sandbox Code Playgroud)
我需要覆盖api.html模板,但我不希望此更改应用到所有地方,因此我在渲染器中动态选择模板。默认情况下,它BrowsableAPIRenderer有一个template = "rest_framework/api.html"属性,但我需要逻辑,所以我使用@property装饰器来执行以下操作:
detail视野范围内如果我们在详细视图中并且"table"存在参数,则返回我的模板,否则返回默认值。 …
我正在使用 Spark 和 Scala。我有两个 Pair RDD。
rdd1 : RDD[(String, List[String])]
rdd2 : RDD[(String, List[String])]
Run Code Online (Sandbox Code Playgroud)
两个 RDD 都连接到它们的第一个值。
val joinedRdd = rdd1.join(rdd2)
Run Code Online (Sandbox Code Playgroud)
因此生成的 RDD 的类型为RDD[(String, (List[String], List[String]))]。我想映射这个 RDD 并提取两个列表的元素,以便生成的 RDD 只包含两个列表的这些元素。
rdd1 (id, List(a, b))
rdd2 (id, List(d, e, f))
wantedResult (a, b, d, e, f)
Run Code Online (Sandbox Code Playgroud)
我天真的方法是直接用 来寻址每个元素(i),如下所示:
val rdd = rdd1.join(rdd2)
.map({ case (id, lists) =>
(lists._1(0), lists._1(1), lists._2(0), lists._2(2), lists._2(3)) })
/* results in RDD[(String, String, String, String, String)] */
Run Code Online (Sandbox Code Playgroud)
有没有办法获取每个列表的元素,而无需单独处理每个元素?类似“ lists._1.extractAll …