这里是 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 文件。非常感谢对这个新手的任何帮助!
这完全是预期的行为。 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