【问题标题】:How can I use Django variables in my javascript/client-logic?如何在我的 javascript/client-logic 中使用 Django 变量?
【发布时间】:2020-09-15 00:29:11
【问题描述】:

我正在尝试序列化查询集以在 javascript 中使用它来填充图表。 问题是它不允许我序列化对象。如果我删除 queryset 它可以工作,但我需要上下文中的查询集才能将其用于 Django 渲染。

那么我如何使用 Django 中的变量来呈现 html div 和 javascript 来呈现图表? (在这种情况下,它是一个画布,为什么我需要 javascript 站点上的变量)。

views.py 其中currencydynascore 是两个自定义变量,queryset 是 Django 模型查询

[...]

context = {
        'queryset': queryset,
        'currency': currency,
        'dynascore': dynascore,
    }

    # Prepare context for javascript
    json_context = json.dumps(context)
    context['json_context'] = json_context

    print(queryset)
    return render(request, template, context)


// Throws: 
// Object of type StocksPrice is not JSON serializable

Javascript

console.log(json_context)

// Throws: 
// Uncaught ReferenceError: json_context is not defined at terminal.js:1

据我了解,Django 检索数据和 javascript/客户端之间唯一的“桥梁”是 JSON?

【问题讨论】:

  • 你试过{{ json_context }} 吗?
  • @Sher 在哪里?对于 console.log?
  • 是的,如果数据显示不正确,请尝试console.log({% autoescape off %} {{ json_context }} {% endautoescape %})
  • 您可以尝试在脚本标签中使用它,就像 Sher 所说的那样。

标签: javascript python django


【解决方案1】:

添加另一个视图并通过 url /chartdata 使用 ajax 将数据获取到您的 javascript。

views.py

from django.http import JsonResponse

def chartdata(request):
    ...
    context = {
        'queryset': queryset,
        'currency': currency,
        'dynascore': dynascore,
    }
    return JsonResponse(context)

urls.py

urlpatterns = [
    path('chartdata', views.chartdata,  name='chartdata'),
]

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 2015-04-21
    • 1970-01-01
    • 2020-06-14
    • 2017-09-06
    • 1970-01-01
    • 2012-07-22
    • 2022-01-09
    • 2014-07-15
    相关资源
    最近更新 更多