【问题标题】:How can I transfer context variable into a html bound javascript code in Django?如何在 Django 中将上下文变量传输到 html 绑定的 javascript 代码中?
【发布时间】:2026-01-16 14:35:01
【问题描述】:

我写下了一个观点:

def Country_names(request):
    c_list = []
    for c_name in c_names:
        c_list.append(c_name)
    return render(request, 'DATAPLO/Country_list.html', {'c_list':c_list})

此视图在我的 html 模板中将列表/数组进一步传输到模板,它尝试将此 python 变量转换为 javascript 数组变量。

<script>
//variable defined to store "c_list" array 
 var c_names = {{c_list}}
//try to access array items like this
 c_names[0]
</script>

但是他的方法在我的情况下不起作用我该怎么做,我在网上探索了几个类似的线程,但在我的情况下没有任何效果。

谢谢

【问题讨论】:

  • script 应该在 HTML 中,在单独的 .js 文件中。如果它在 HTML 页面内,效果很好。

标签: javascript python django django-views


【解决方案1】:

包含国家模型的更新答案

models.py:

class Country(models.Model)
    name = models.CharField(max_length=100)

因此,如果您的国家/地区模型看起来像这样,我们需要将其转换为要转换为 json 的字符串列表。

import json

def Country_names(request):
    c_list = Country.objects.all().values_list('name', flat=True)
    return render(request, 'DATAPLO/Country_list.html', {'c_list':json.dumps(c_list)})

然后以 HTML 格式输出。记得把它标记为安全的,这样它就不会被转义了

<script>
    //variable defined to store "c_list" array
    var c_names = {{c_list|safe}}
</script>

【讨论】:

  • 显示奇怪的错误:TypeError at /DATAPLO/ , ]> 不是 JSON 可序列化的。
  • 啊,好吧,那么你毕竟需要一个列表理解。我会更新答案
  • @Sune 你能解释一下我们在列表理解过程中使用了什么“country.name”
  • 如果您只需要名称,更好的方法是使用 values_list
  • 我不确定我是否理解您的问题,但基本上我们在列表理解过程中所做的是遍历所有国家并将其 name 属性添加到新列表中
【解决方案2】:

您可以使用values_list() 获取国家名称列表。

import json
def getCountryNames(request):
    country_names = list(Country.objects.values_list('name', flat=True))
    return render(request, 'DATAPLO/Country_list.html', {'country_names':json.dumps(country_names)})

rest 和@Sune 的回答一样

【讨论】:

    最近更新 更多