在块的外部还是内部编写脚本标签?

时间:2019-08-10 17:28:01

标签: python django django-templates

请考虑以下代码。

<!--templates/home.html-->
{% extends 'base.html' %}
{% load static %}

{% block content %}
  {% for post in object_list %}
  <div class = 'post-entry'>
    <h2><a href="{% url 'post_detail' post.pk %}">{{ post.title }}</h2>
      <p>{{ post.body }}</p>
  </div>
  {% endfor %}
  <script type = "text/javascript" src = "{% static 'js/test.js' %}"></script>
{% endblock content %}

<!--templates/home.html-->
{% extends 'base.html' %}
{% load static %}

{% block content %}
  {% for post in object_list %}
  <div class = 'post-entry'>
    <h2><a href="{% url 'post_detail' post.pk %}">{{ post.title }}</h2>
      <p>{{ post.body }}</p>
  </div>
  {% endfor %}
{% endblock content %}
<script type = "text/javascript" src = "{% static 'js/test.js' %}"></script>

第一个成功执行,但是第二个没有成功。是否有必要从Django模板块内部加载外部静态文件?如果没有,为什么第二个代码不执行?

PS:我是django的新手。

为清楚起见,我还在此处提供基本模板的代码。

<!--templates/base.html-->
{% load static %}
<html>
  <head><title>Django Blog</title>
    <link href = "{% static 'css/base.css' %}" rel = "stylesheet">
  </head>
  <body>
    <header><h1><a href = "{% url 'home' %}">Django Blog</a></h1></header>
    <div>
      {% block content %}
      {% endblock content %}
    </div>
  </body>
</html>

2 个答案:

答案 0 :(得分:2)

  

第一个成功执行,但是第二个没有成功。是否有必要从Django模板块内部加载外部静态文件?如果没有,为什么第二个代码不执行?

如果您覆盖基本模板,那么只能说“填满”。 Django应该在哪里在块外写东西?在文件的开头?在文件末尾?介于两者之间?

根据documentation on template inheritance [Django-doc]中的规定:

  

Django模板引擎中最强大(因此也是最复杂)的部分是模板继承。模板继承允许您构建一个基本的“骨架”模板,该模板包含网站的所有常见元素,并定义子模板可以覆盖的块

不过,您可以定义多个块。例如,通常在末尾添加一个块,您可以选择在其中添加一些额外的JavaScript,例如:

<!--templates/base.html-->
{% load static %}
<html>
  <head><title>Django Blog</title>
    <link href="{% static 'css/base.css' %}" rel="stylesheet">
  </head>
  <body>
    <header><h1><a href="{% url 'home' %}">Django Blog</a></h1></header>
    <div>
      {% block content %}
      {% endblock content %}
    </div>
  {% block js %}
  {% endblock %}
  </body>
</html>

因此,您可以在页面底部编写<script ...>部分,例如:

{% extends 'base.html' %}
{% load static %}

{% block content %}
  {% for post in object_list %}
  <div class='post-entry'>
    <h2><a href="{% url 'post_detail' post.pk %}">{{ post.title }}</h2>
      <p>{{ post.body }}</p>
  </div>
  {% endfor %}
{% endblock %}

{% block js %}
<script type="text/javascript" src="{% static 'js/test.js' %}"></script>
{% endblock %}

您当然可以在{% block ...%} ... %{ endblock %}部分之外定义变量等。但是,如果您从基本模板继承,则所有渲染外部的内容都将被忽略。

答案 1 :(得分:1)

对于第二个脚本,您正在使用django命令src指定script element的{​​{1}}属性,为此,它必须在django块内, >

如果要在不使用django块的情况下执行此操作,则需要在不使用django命令的情况下指定{% static 'js/test.js' %}属性的值,就应像仅使用html一样进行操作,< / p>

src