javascript - 从 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 创建的变量。所以似乎不可能做到这一点。
解决方案
从您的示例来看,您希望以编程方式访问 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 模型序列化为字典的选项。
推荐阅读
- cron - CRON 字符串不兼容 Quartz
- elasticsearch - 启用从一个自定义 IP 到 Elasticsearch 集群的远程访问
- ios - iOS API 密钥:在发出 http 请求时,是否有一种实际安全的方法来保护您的 API 密钥?
- azure - 如何在 Azure Cloud 上使用普通文件缓存加入 Kafka KStream?
- map-projections - SpatialPixelsDataFrame 对象的投影
- .htaccess - 如何删除每个链接末尾出现的单词
- angularjs - 如何使用 ng-repeat 值设置多选下拉菜单的选择限制
- c - 为什么我的数字数组的平均值不正确?
- vb.net - 从 Informix vb.net 填充 datagridview 的特定列
- python - 无法构建 LibAdblockPlus