【问题标题】:send a list of string elements in Django在 Django 中发送字符串元素列表
【发布时间】:2016-12-20 08:05:06
【问题描述】:

我是 Django 新手。这是我的标签模型

class Tag(models.Model):
    name=models.CharField(max_length=255)
    post=models.ManyToManyField('Post')

我将所有标签名称的列表发送到模板。我想在 javascript 代码中使用它。问题是,列表在 javascript 中看起来像这样

 [u'c++', u'c#', u'php', u'python',
 u'django']

应该是这样的

['c++', 'c#', 'php', 'python', 'django']

我认为这是关于 unicode 的一些东西,但我不知道如何处理它。请问有什么帮助吗?

请原谅我的英语不好

【问题讨论】:

  • 您的模板和视图是什么样的?
  • 我在视图中将列表编码为 JSON,然后在 javascript 代码 $.parseJSON('{{tags | safe}}') 中对其进行解码。感谢您提及安全过滤器:)

标签: javascript python django unicode


【解决方案1】:

你能告诉我错误是在你第一次渲染视图时,还是一个ajax调用?,我认为你正在做ajax调用,那么你可以调试django进程,在这里写下数据是什么请您恢复您的数据库?

另外,能否把你正在使用的json序列化器放上来?

如果你尝试下一个代码,你会发现问题不是 unicode:

         import json
         json.dumps([unicode(i) for i in range(10)])

result: '["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]'

尝试发送上述数据,并告诉我们结果。谢谢!

【讨论】:

  • 非常感谢,我在视图中将列表编码为 JSON,然后在 javascript 代码中对其进行解码 $.parseJSON('{{tags | safe}}')
  • dumps() 的输出不能安全地包含在<script> 块中,不应标记为|safe。攻击者可以将字符串</script><script>attack() 放入标签中并获得跨站点脚本。您可以|escapejs JSON 字符串使其适合包含在 JavaScript 字符串中,然后从 JS 端使用 JSON.parse() 再次解码结构。更常见的是,您可以将 JSON 编码的数据放在 data- 属性中(标准的 HTML 转义 Django 会自动转义)并使用例如 jQuery 的 $(...).data() 从 DOM 中读取它,它将为您处理 JSON跨度>
【解决方案2】:

使用“|安全”

在你的模板中有这样的东西。

{{ variable_name | safe }}

【讨论】:

  • 谢谢,但添加安全过滤器后列表不是我想要的,列表 = [u'c++', u'c#', u'php', u'python', u'django']
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
相关资源
最近更新 更多