【问题标题】:How to check if Django object is None in javascript?如何在javascript中检查Django对象是否为None?
【发布时间】:2016-12-29 16:36:00
【问题描述】:

js中如何判断一个Django对象是否为None?

我目前有一个变量person 存储一个Django 对象或None。在我的 js 中,我有:

if ({{person}} != None) {
    execute_function({{person}})
}

这里似乎有什么问题?

【问题讨论】:

  • 试试if ({{person}} != "None")。或者你可以使用 Django {% if %} 而不是 JavaScript。
  • 您无法使用客户端 javascript 访问 django 对象
  • 当它被解释为 JavaScript 时,它已经不是 Django 对象了。 Django 模板在服务器上解析并将结果发送到浏览器。当浏览器加载页面时,JavaScript 开始运行。您可以在 JavaScript 代码中测试 django 对象将输出到 html 的文本。

标签: javascript python django


【解决方案1】:

这对我有用:

{% if person != None %}
    var p = ...
    ...
{% endif %}

【讨论】:

    【解决方案2】:

    John Smiths 的回答最有意义,请在 Django 的模板中查看。 其实更好的是:

    {% if person %}
        execute function
    {% endif%}
    

    如果您需要使用 JavaScript 检查它,JavaScript 使用 null 而不是 None,因此假设 JavaScript 代码也在 Django html 模板中(而不是作为外部文件加载),这应该可以工作。

    if ({{person}} != null) {
        execute_function({{person}})
    }
    

    编辑:

    添加更多细节: 这可能会被解析为:

    if (john != null){
        execute_function(john)
    }
    

    JavaScipt 不会理解 john ,但它会理解引用的版本 'john' :

    if ('john') != null){
        execute_function('john')
    }
    

    实现这一点的最简单方法是向 Person 模型添加一个模型方法。

    Class Person(models.Model):
        ...field definitions here.
    
        def quoted_name(self):
            return "'%s'" % self.name
    

    然后在模板中(并且空字符串评估为假):

    if ({{person.quoted_name }}) {
        execute_function({{person.quoted_name }})
    }
    

    【讨论】:

    • 实际上,您可能需要有条件地引用 {{person}} 的输出,否则 JavaScript 会将其视为未声明的变量。我个人会在 person 上定义一个模型方法(在 Django 中),以返回 {{ person }} 将输出到模板的引用版本。 {{ person.quoted_name }} 或类似的东西。
    • 您能否澄清引用版本的含义或提供示例?
    猜你喜欢
    • 2011-03-28
    • 2010-09-27
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 2023-03-02
    相关资源
    最近更新 更多