javascript - Javascript 在模板 html 文件中运行,但不在 Django 应用程序中的扩展 html 文件中运行
问题描述
我正在用 Django 和 Vanilla JS 编写一个网站
我有 2 个 html 页面,我希望它们都共享 css,但我希望它们使用不同的 javascript。两个页面都扩展了 layout.html。
layout.html 看起来像这样开始
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<title>{% block title %}Social Network{% endblock %}</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<link href="{% static 'network/styles.css' %}" rel="stylesheet">
</head>
我的 index.html(扩展了我的 layout.html)是这样开始的
{% extends "network/layout.html" %}
{% load static %}
<script src="{% static 'network/messages.js' %}"></script>
我的 Javascript 文件如下所示:
document.addEventListener('DOMContentLoaded', function() {
console.log("page loaded!")
document.addEventListener('click', event => {
const element = event.target;
console.log("Something was clicked")
})
});
它只是在加载页面和单击某些内容时打印出一行。
但是,当我使用这样的代码转到 index.html 时,没有加载 javascript 文件,加载页面或单击任何内容时都不会打印任何内容。
但是,如果我将 layout.html 页面修改为这样:
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<title>{% block title %}Social Network{% endblock %}</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<link href="{% static 'network/styles.css' %}" rel="stylesheet">
<script src="{% static 'network/messages.js' %}"></script>
</head>
我在其中加载messages.js,然后将其从index.html中删除,如下所示:
{% extends "network/layout.html" %}
然后javascript工作,页面正确加载。唯一的问题是它也会为我不想要的其他页面加载它,我只想为 index.html 加载 message.js,我不知道为什么当我只将它包含在 index 中时它拒绝加载.html。
我很感激任何帮助。
解决方案
这不是您扩展模板的方式。Django 模板使用块系统。所以script
index.html 中的 根本不会呈现。您必须在 中有一个空块layout.html
,并在 中覆盖该块index.html
。
layout.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>{% block title %}Social Network{% endblock %}</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<link href="{% static 'network/styles.css' %}" rel="stylesheet">
</head>
<body>
{% block content %}{% endblock content %}
</body>
</html>
index.html
{% extends "network/layout.html" %}
{% load static %}
{% block content %}
<script src="{% static 'network/messages.js' %}"></script>
{% endblock content %}
尝试将 HTML 添加到您当前的index.html
. 它不会显示。您必须将所有内容都包含在block
s 中才能正常工作。
推荐阅读
- kubernetes - Kubernetes:自定义资源的 RBAC 授权失败
- javascript - 传递一个 js 变量来设置必须加载哪个视图(刀片组件)
- ios - 如何从自定义视图控制器类加载初始视图控制器
- python - 如何在两个列表之间找到完美匹配?
- docker - 从docker中的docker进行卷绑定安装?
- ios - 使用 Timer 的参考周期中的强、弱或无主
- generated - 如何生成正方形的多米诺骨牌?
- python - 如何将两个图像重叠在一起,创建图例并在 Python(Matplotlib)中保留 CRS?
- sql-server-2008 - 如何在 SQL Server 中进行松散字符搜索?
- ios - 如何在 TabBarController 加载它的视图后添加另一个 TabBarItem