【问题标题】:How to pass json dictionary from javascript .get to django template?如何将 json 字典从 javascript .get 传递给 django 模板?
【发布时间】:2019-10-02 21:29:04
【问题描述】:

在我目前拥有的 django 模板的头部:

<script>
   $.get('get_students/', function (dict) {
        alert(dict)
   })
</script>

这提醒我有一个对应于dict的json字典,来自以下django视图:

def get_students(request):
    students = Student.objects.all()

    students_json = serializers.serialize('json', students)

    return HttpResponse(json.dumps(students_json), content_type='application/json')

是否可以将脚本标签中的 dict “转义”到普通的 Django 模板中,以便我可以使用以下内容对其进行迭代:

{% for d in dict%}
    <p>d.username</p>
{% endfor %}

如果有更明智的方法,请推荐给我,我还在学习。请注意,我正在一个组件内部工作,我必须从中调用视图,这就是我使用 js get 的原因。

谢谢!

【问题讨论】:

    标签: javascript json django


    【解决方案1】:

    所以答案是使用 JQuery。在脚本标签内,我遍历字典值并使用 js 字符串将它们附加到 innerHTML。所以上面的 .get 必须变成这样:

    $.get('get_students/', function (data) {
                var write_to_div = document.getElementById("studentDiv");
                for (var d in data) {
                    value = data[d]
                    write_to_div.innerHTML += "<p>" + value['first_name'] + "</p>"
    
                }
            })

    这会将包含所有用户的所有名字的段落附加到 id 为“studentDiv”的 div 中,所以在我的 HTML 模板中

    &lt;div id="studentDiv"&gt;&lt;/div&gt;

    【讨论】:

      【解决方案2】:

      虽然它不能直接回答问题,但难道不能通过使用get_context 方法将数据传递到视图而不是循环遍历它来完成吗?

      所以你的视图应该是这样的:

      class ExampleDetailView(DetailView):
      model = Student
      
      def get_context_data(self, **kwargs):
          # Call the base implementation first to get a context
          context = super().get_context_data(**kwargs)
          # Add in a QuerySet of all the books
          context['contextDictionary'] = get_students()
          return context
      

      然后在模板中有类似的东西:

      {% for d in contextDictionary %}
          <p>d.username</p>
      {% endfor %}
      

      【讨论】:

      • 我的网址包含“url(r'^get_students/', get_students)”,我该如何引用这个视图?我不介意我们如何做到这一点,只要我可以在不指定新模板的情况下按照您所说的方式访问它。您能否详细说明如何执行此操作,我不是很熟悉...我有一个学生模型,而不是发布者模型,我也不知道如何从我的 HTML 模板中使用 get 调用该视图...跨度>
      • 在我发布的代码中,您不会从获取请求中调用代码。您可以直接通过视图将其传递到模板中。您可以将视图和模型添加到模板中吗?
      • 我不这么认为。我在主页上使用了 wagtail 块组件,因此主页已设置,我无法更改它在 urls 中调用的视图,即 url(r'', include('django.contrib.auth.urls')) (除非一个网址可以调用两个视图?)。所以我想我必须从模板本身调用另一个视图。
      猜你喜欢
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      • 2020-06-04
      • 1970-01-01
      相关资源
      最近更新 更多