Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从单独的JavaScript文件访问页面上的Django变量_Javascript_Django - Fatal编程技术网

从单独的JavaScript文件访问页面上的Django变量

从单独的JavaScript文件访问页面上的Django变量,javascript,django,Javascript,Django,关于这个主题,我已经搜索了这么多,但没有多大成功,我希望在您阅读了整个问题描述之后,这不会是重复的 假设我有一个变量countryList,一个JSON文本,从Django视图上下文返回到模板,我直接将它插入到主体中: <body> {% if countryList %} [Blocks for other codes] {% endif %} </body> 然后使用var-cList='{{countryList}}'只给我一个字符串变量{{coun

关于这个主题,我已经搜索了这么多,但没有多大成功,我希望在您阅读了整个问题描述之后,这不会是重复的

假设我有一个变量
countryList
,一个JSON文本,从Django视图上下文返回到模板,我直接将它插入到主体中:

<body>
  {% if countryList %}
  [Blocks for other codes]
  {% endif %}
</body> 
然后使用
var-cList='{{countryList}}'只给我一个字符串变量
{{countryList}

Django设置没有问题,
country.js
可以正确加载。这让我怀疑它是否与范围有关。我知道这类Django变量是作为文本直接插入HTML的。那么,这样一个变量驻留在这个HTML页面的什么地方呢?如何从加载到此页面的JS文件访问它


添加注释:我知道我可以在
[其他代码块]
中插入脚本,将此变量存储到本地或会话存储中,然后允许从JS文件访问它。但我打算在一个文件中完成它

为什么不使用ajax呢?如果你想在JS中使用变量,最好的方法是调用ajax服务器。@giaco:是的,原则上我完全同意你的意见。AJAX调用的一个问题是异步性,如果重复使用此变量,则会在客户端和服务器之间产生更多的数据流量。我想在本地保存这个变量。但我似乎在
{%if%}
{%endif%}
之间插入了一个单独的代码价格。我更喜欢把所有的逻辑都放在一个JS文件中。我明白你的意思。你想要达到的是坏习惯。我会选择Django模板呈现(如果你在javascript中没有数据的话)或者ajax调用来获取和显示所有数据(没有数据呈现)。@giaco:这是一个很好的建议。但是,在大修之前,我不得不暂时接受这种情况。如果你有重型前端应用程序,我建议你使用一些前端框架,如Angular/React/Vue,并完全分离前端。但是,如果您正在构建简单的CRUD应用程序,那么我不会用太多的javascript调用数据(它很快就会变成意大利面代码)来使事情复杂化。
<script type="text/javascript" src="{% static 'country.js' %}"></script>
<body>
  {% if countryList %}
  [Blocks for other codes]
  {% endif %}
</body>