Python Django搞乱了加载标签的顺序?

Python Django搞乱了加载标签的顺序?,python,django,Python,Django,我在django项目(bootstarp4.6)中使用项目的导航栏。下面是代码: Base.html: {%load static%} {%block css%}{%endblock%} {%block title%}{%endblock%} {%include'quicky/navbar.html%} {%block content%}{%endblock%} {%block js%}{%endblock%} 您正在加载静态文件,其中包括在实际加载jquery库之前需要jquery的函数。这

我在django项目(bootstarp4.6)中使用项目的导航栏。下面是代码:

Base.html:

{%load static%}
{%block css%}{%endblock%}
{%block title%}{%endblock%}
{%include'quicky/navbar.html%}
{%block content%}{%endblock%}
{%block js%}{%endblock%}

您正在加载静态文件,其中包括在实际加载jquery库之前需要jquery的函数。这就是为什么您会得到错误
$未定义
,因为
$
是在
jquery


尝试此操作-手动将
navbar.js
添加到jquery库之后的
index.html
页面,并确认错误消失。如果是这样,则表示您的问题在于加载顺序。

包含在
包含
标记中的模板与包含模板是独立的(除了上下文)。从:

标记应被视为“呈现此 子模板并包含HTML”,而不是“解析此子模板并 包括其内容,就好像它是父项的一部分一样”。这意味着 包含的模板之间没有共享状态–每个 include是一个完全独立的渲染过程

也就是说,包含模板的块或扩展包含模板的模板块与包含模板完全不相关

您只需在基本模板中单独呈现该脚本标记(以及您希望在父块模板中填充的任何其他内容):

<script src="{% static 'js/quicky/navbar.js' %}"></script>
{% block js %}{% endblock %}
<!-- in base template -->
{% block js %}
    <script src="{% static 'js/quicky/navbar.js' %}"></script>
{% endblock %}


<!-- in children templates keeping the navbar js -->
{% block js %}
    {{ block.super }}
    <script src="{% static 'js/someother.js' %}"></script>
{% endblock %}


<!-- in children templates NOT keeping the navbar js -->
{% block js %}
    <!-- Since we dont render block.super it is not rendered anymore -->
    <script src="{% static 'js/someother.js' %}"></script>
{% endblock %}

{%block js%}{%endblock%}
或者,如果您希望能够通过扩展模板删除此标记:

<script src="{% static 'js/quicky/navbar.js' %}"></script>
{% block js %}{% endblock %}
<!-- in base template -->
{% block js %}
    <script src="{% static 'js/quicky/navbar.js' %}"></script>
{% endblock %}


<!-- in children templates keeping the navbar js -->
{% block js %}
    {{ block.super }}
    <script src="{% static 'js/someother.js' %}"></script>
{% endblock %}


<!-- in children templates NOT keeping the navbar js -->
{% block js %}
    <!-- Since we dont render block.super it is not rendered anymore -->
    <script src="{% static 'js/someother.js' %}"></script>
{% endblock %}

{%block js%}
{%endblock%}
{%block js%}
{{block.super}}
{%endblock%}
{%block js%}
{%endblock%}

我觉得您只是没有关闭
{%block css%}
。可能是这样吗?include标记没有填充当前模板块,因此您认为它填充了您的js块是错误的,这就是为什么您会出现错误。我知道问题在于加载顺序,但我的问题是,在Base.html文件中,我实际上编写了脚本标记来首先加载jquery,在那之后,我添加了
{%block js%}
,所以html应该先加载那些标记,然后再转到标记。谢谢你的帮助。也许我遗漏了什么,但我看不出你是在base.html文件中首先加载脚本标记。在base.html文件中的第一件事是静态include函数,它看起来并不是“延迟的”。您的脚本标记位于文件底部,将在“navbar.html”加载后加载Hanks仅向my js而非bootstrap js添加延迟标记修复了此问题。:)