Django 不处理 javascript 文件

问题描述 投票:0回答:1

这里是 django 新手。我在连接 django python 中的 javascript 代码时遇到问题。我认为我已经遵循了项目配置的文档。

HTML 模板:

<!DOCTYPE html>
<html lang="en">
  <body>
    Test template<br>
    {% csrf_token %} 
    {% load static %}     
    {{ form | safe }}
    <script type="text/javascript" src="{% static '/grid_1/test_script.js' %}"></script>
    Test template end<br>
  </body>

查看功能:

def test_view(req: djhp.HttpRequest):
  form = forms.TestForm(); vals = dict()
  vals["test_val"] = "This is a test"
  return djsc.render(req, "test_template.html", vals)

JavaScript 代码:

alert("test script start")
var x = "{{ test_val }}"
alert(x)

第二个 JavaScript 警报显示“{{ test_val }}”而不是“This is a test”。所以看起来 django 没有处理 .js 文件。非常感谢对这个新手的任何帮助!

javascript django django-views django-templates
1个回答
0
投票

这完全是预期的行为。 Django 只会替换 HTML 模板内的值,但考虑到您的 JavaScript(就像您在代码中添加的那样)是“静态”的,而不是在原始文件中,这些值不会被替换。这同样适用于基本上任何模板框架。一种选择是创建嵌入到 HTML 中的

application/json
脚本,如下所示:

<!-- probably somewhere in <head> -->
<script type="application/json" id="ssr-data">{{ data }}</script>

并且在 Python 中,您可以对包含此类值的字典进行字符串化,并将其作为

data
传递给视图(例如,使用 Python json 库:
json.dumps({ "test_value": 23 })
)。要从 JS 访问它,您只需执行以下操作:

const data = JSON.parse(document.getElementById("ssr-data").innerText)
console.log(data.test_val) // 23
© www.soinside.com 2019 - 2024. All rights reserved.