Django:当使用python变量时,如何在静态文件夹中保持JavaScript代码的独立性

Django: How to keep JavaScript code separate in static folder when it uses a python variable

本文关键字:文件夹 静态 JavaScript 独立性 代码 python 变量 Django      更新时间:2023-09-26

我有一堆画布需要渲染。我不想把python循环中的JavaScript代码,因为我觉得这是的糟糕做法

home.html

{% load staticfiles %} 
<head>
    <script type="text/javascript" src="{% static 
    'canvas/canvasrender.js'   %}"></script>        
</head>
{% for canvas in user_canvas_set %}
    <canvas  class = "canvas" id="{{canvas.id}}" width="400" height="200" 
    canvas_post= ""{{canvas.canvas_post}}"" >
    Your browser does not support the HTML5 canvas tag.</canvas>
    **<script>
    canvasrenderNP.canvaswrite("{{canvas.id}}","{{canvas.canvas_post}}")
    </script>** 
{% endfor %}

我制作了一个自定义函数,返回一个用户canvas id数组,因为我使用canvas id作为canvas元素的id。

home.html

<script>
        alert("{{user_canvas_ids}}")
</script>

我得到想要的输出:

[247, 248, 251, 252]

现在,当我把这个放在一个静态文件

canvasrender.js

alert("{{user_canvas_ids}}")

然后将其加载到home.html

{% load staticfiles %} 
<head>
    <script type="text/javascript" src="{% static 
    'canvas/canvasrender.js'   %}"></script>        
</head>

输出:

"{{user_canvas_ids}}"

我很困惑到底发生了什么。我以为script标记在"<script> </script>"之间插入了js文件

我知道我可以制作这样的元素并获得属性,但我觉得这不是一个好的练习,或者可以吗?

<p id="canvas_ids" canvas_ids ="{{user_canvas_ids}}"> </p >

我还能做些什么来避免编写JavaScript代码吗在HTML文件中?

为什么这不是一个重复的问题。它没有说明为什么html页面中链接的js文件不能保持对python变量的引用。但是,如果JavaScript是在html页面中编码的,它可以

正如您在自己的评论中提到的,您可以将user_canvas_id保存在home.html中的js变量中,并在js文件中访问它。类似这样的东西:

<head>
    <script>var user_canvas_id = "{{ user_canvas_id }}"</script>
    <script type="text/javascript" src="{% static 'canvas/canvasrender.js' %}"></script>
</head>

我很困惑到底发生了什么。我以为script标记在"<script> </script>"之间插入了js文件

有点像,但这是由不知道Django模板中花括号的特殊含义的浏览器在客户端完成的。

Django上下文中的static意味着:Django按原样提供文件,而不通过模板引擎运行它。(无论如何,这在这里都没有帮助,因为对于隔离的JavaScript文件,user_canvas_ids的值是未知的,所以模板引擎无法用任何有用的东西来代替它。)