小编rob*_*nki的帖子

自定义 DjangoRestFramework 可浏览 API

我正在使用 Django Rest Framework 3.11.0,我想使用 BrowsableAPIRenderer 和自定义模板来呈现实例的详细信息。我只想覆盖 dict/json 的渲染,在下图中标记为红色,我想保留其余所有内容。

通过覆盖,restframework/api.html我只能更改标题、标题和一些字段,但我没有找到一种方法来呈现实例的详细信息,例如在表格中。有没有办法做到这一点?

澄清:我有带有大型字典的模型,我想将它们显示得比内联字符串更漂亮。我认为当我找到如何定制(已经很漂亮的)Django RestFramework BrowsableAPI 时,我也将能够解决我的问题。

(如果您想解决类似的问题,请查看我的更新 2。)

截屏


更新1

这是我从 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视野范围内
  • 检查 GET 参数

如果我们在详细视图中并且"table"存在参数,则返回我的模板,否则返回默认值。 …

django django-templates django-rest-framework

6
推荐指数
1
解决办法
3981
查看次数

提取 RDD 中列表的元素

我想要达到的目标

我正在使用 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 …

scala apache-spark

0
推荐指数
1
解决办法
1580
查看次数