在扩展其他模板的模板中加载静态文件 - Django javascript

时间:2017-07-18 04:57:01

标签: javascript python django templates

我想在扩展base_generic模板的模板中加载一个javascript文件。我使用通用listView来呈现模板。

因为我不能使用" {%url%}" tamplate标签内的" {%block%}"标签我将链接硬编码如下:

<script src="static/js/search.js">

不幸的是,该文件不起作用,我收到一条消息:&#34;语法错误:期望表达式,得到&#39;&lt;&#39; &#34;

我想这是因为我的视图试图将模板呈现为html(我是对的吗?) - 我的假设基于这篇文章:SyntaxError: expected expression, got '<'

所以我的问题是:如何在扩展另一个模板的模板中加载静态文件。

编辑:

这是我的模板:

{% extends "base_generic.html" %}


  {% block content %}


  {% if search_flag %}
  SEARCHFLAG ON
  {% else %}

  <h2 class="myh"> Książki: </h2>

  {% if book_list %}
  <script>
  var lista=[];
  {% for book in book_list %}
  var title="{{book.title}}";
  var authors=[];
  {% for author in book.author.all %};

    var aut="{{author.last_name}}";


    authors.push(aut);

  {% endfor %}

  var authorsStr=authors.join('; ');

  var book=[title, authorsStr]
  lista.push(book);

  {% endfor %}
  console.log("created list of books and authors - name: lista")
  </script>

  {% else %}

  <p>W katalogu nie ma książek</p>
  {% endif %}
  {% endif %}


  <script src="static/js/search.js">
  </script>


  {% endblock %}

2 个答案:

答案 0 :(得分:2)

您可以在{% url "" %}中使用block。要使用static,请确保在需要时直接在{% load static %}模板标记后添加extends。然后你可以:

<script src="{% static 'js/search.js' %}">

答案 1 :(得分:1)

您不必使用{% url %}标记来获取statis文件的路径,只需将其写在模板文件的顶部:

{% load staticfiles %}

之后,yuo可以通过以下结构访问您的静态文件:

<script src="{% static 'js/search.js' %}">

documentation中阅读更多内容。

如果要扩展基本模板,则必须为脚本添加块并将其扩展到另一个模板

base.html文件:

{% block scripts %}
{% endblock %}

的index.html:

{% block script %}
    <script src="{% static 'js/search.js' %}">
{% endblock %}

希望这会有所帮助。