【问题标题】:Django: Best practices for using Model data in clientside javascriptDjango:在客户端 javascript 中使用模型数据的最佳实践
【发布时间】:2020-07-10 04:19:10
【问题描述】:

我是使用 django 的新手,我正在尝试将信息发送到我的客户端 javascript。我有一个 FooBarModels 列表,我想与我的客户端 Javascript 一起使用。目前,我正在使用 django 模板生成一个字典数组,其中包含我将在 Javascript 中使用的信息。

这感觉像是一个 hacky 解决方案,有没有更好的方法来实现这一点?


models.py

class FooBarModel(models.Model):
    bar = models.ForeignKey(Bar, on_delete=models.CASCADE)

    @property
    def desc(self):
        # logic here

    @property
    def display_name(self):
        # logic here

模板.html

<script>
var $fb_list = [
    {% for fb in foobar_list %}
    { "name": {{fb.display_name}}, "desc": {{fb.display_name}} },
    {% endfor %}
]

// a bunch of code that uses the $fb_list
</script>

处理这种情况的最佳做法是什么?我应该向客户端发送一个 JSON 包并对其进行解析吗?

【问题讨论】:

    标签: javascript python django django-templates


    【解决方案1】:

    这称为Serialization,这意味着将django django.db.Model 转换为JSON,与此相反的称为Deserialization,这意味着将JSON 转换为本机对象,这一次-如果它是有效对象-。

    Django supports 原生支持,DRF 扩展了这种支持。

    这是 django 本身的示例。

    from django.core import serializers
    
    data = serializers.serialize("json", SomeModel.objects.all()) # xml is supported too
    print(data) # prints model as JSON
    

    JSONSerializer = serializers.get_serializer("json")
    json_serializer = JSONSerializer()
    json_serializer.serialize(queryset)
    data = json_serializer.getvalue()
    print(data)
    

    即使您正在序列化单个对象,它也需要一个查询集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多