首页 > 解决方案 > 从 JavaScript 变量访问 Django 变量 [已解决]

问题描述

首先,我想说这是我在这里的第一个问题!(如果这是多余或重复的,请原谅我)

我在从 Django 模板调用 JS 脚本时遇到一些问题:

{% for suggestion in suggestions %}
    <img class="catalogue-poster" src="{{ suggestion.poster }}" alt="Portada"  onclick="                 
        document.getElementById('{{form.title.auto_id}}').value = '{{suggestion.title}}'
        document.getElementById('{{form.year.auto_id}}').value = '{{suggestion.year}}'
        document.getElementById('{{form.director.auto_id}}').value = '{{suggestion.director}}'
        document.getElementById('{{form.rating.auto_id}}').value = '{{suggestion.rating}}'
        document.getElementById('{{form.poster.auto_id}}').value = '{{suggestion.poster}}'
        document.getElementById('{{form.trailer.auto_id}}').value = '{{suggestion.trailer}}'
        document.getElementById('{{form.synopsis.auto_id}}').value = '{{suggestion.synopsis}}'
        document.getElementById('{{form.cast.auto_id}}').value = '{{suggestion.cast}}'  
    " />
{% endfor %}

所以,首先,我怎样才能在外面声明一个函数。我是 C 开发人员,抱歉我的无知。

我试图在外面创建一个脚本,例如

<script>
    function foo() {
      console.log('Hey');
    });
</script>

并以这种方式调用它:

<img class="catalogue-poster" src="{{ suggestion.poster }}" alt="Portada"  onclick="foo()"/>  

但是这个在纯 HTML 上工作的简单的东西,使用 django 模板似乎不起作用......

另一方面,真正的问题是,有没有办法使用 js 变量访问在 render 中传递的 Django 变量?

如:

const jsVariable = 'title';
document.getElementById('{{form.jsVariable.auto_id}}').value = '{{suggestion.jsVariable}}'

我还没有找到任何方法来实现这一点,也许还有另一个好主意!

[已解决]:正如@SahilDesai 所说,模板只会对视图函数通过上下文对象发送的变量做出响应。Jinja 模板不会知道由 javascript 创建的变量。所以似乎不可能做到这一点。

标签: javascriptdjangodjango-templates

解决方案


从您的示例来看,您希望以编程方式访问 Javascript 中的 Django 模型的属性。

主要内容是您首先需要在 Javascript 中公开您想要访问的数据结构(即模型)。

这是一个简单的、经过编辑的、您可以尝试的概念验证。

import json

def my_view(request):
    obj = MyModel.objects.get(1)
    obj_dict = {
        "foo": obj.foo,
        "bar": obj.bar,
    }
    return render(request, 'my_view.html', context={'obj_json': json.dumps(obj_dict)} )

<script>
var obj = {{obj_json}};

var field = 'foo';
console.log(obj[field]);

查看Convert Django Model object to dict,所有字段都完好无损,以了解将 Django 模型序列化为字典的选项。


推荐阅读