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

2024-04-18 07:33:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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 %}

我创建了一个自定义函数,返回用户画布id的数组,因为我使用画布id作为画布元素的id。在

home.html

^{pr2}$

我得到所需的输出:

[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页面中编码的,它可以


Tags: 文件代码ididshomehtml画布js
2条回答

I am confused to as what is going on. I thought that the script tag inserts the js file in between the "<script> </script>"

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

static在Django的上下文中只意味着:Django按原样服务该文件,而不通过模板引擎运行它。(这在这里没有任何帮助,对于单独的JavaScript文件,user_canvas_ids的值将是未知的,因此模板引擎无法替换任何有用的值。)

正如您在自己的评论中提到的,您可以将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>

相关问题 更多 >