如何从JavaScript文件链接到Django静态资源?

时间:2018-01-31 21:23:31

标签: javascript python django

我尝试加载特定文件但由于Django管理相对路径的方式而失败。这是我的应用程序的结构:

mysite
|-- manage.py
|-- mysite
    |-- __init__.py
    |-- settings.py
    |-- urls.py
    |-- wsgi.py
|-- app
    |-- __init__.py
    |-- models.py
    |-- tests.py
    |-- views.py
    |-- static
        |-- JS
            |-- myScript.js
        |-- data
            |-- myData.geojson
|-- templates
    |-- app
        |-- index.html

换句话说,很标准。两个关键部分是我将myScript.js加载到我的index.html中,如下所示:

<script type='text/javascript' src="{% static '/JS/myScript.js' %}"></script>

问题是,在myScript.js中,我想加载myData.geojson。这不起作用:

...
'url': '/static/data/myData.geojson'
...

也不是

'url': '{% static /data/myData.geojson %}' #this throws an error

我只想要一个项目设置,我可以使用相对路径来执行此操作:

'url': '../data/myData.geojson'

这可能吗?我目前的设置如下:

STATIC_URL = '/static/'
STATIC_ROOT = '/var/www/mysite/static'

1 个答案:

答案 0 :(得分:0)

Django在渲染时将static模板标记URL转换为其对应的绝对URI。您不能在JavaScript文件中使用Django模板标记。有两种方法可以解决这个问题。

  1. 找出资源的绝对URI,并在JS文件中使用它。
  2. 将需要使用外部链接的部分移动到HTML文件中。并执行以下操作:
  3. <span id="absoluteURIResource" style="display: hidden;">{% static "path/to/your/resource" %}</span>

    然后在您的JavaScript中,您可以访问:

    var path = document.getElementByID("absoluteURIResource").innerHTML;

    第二个更像是一个黑客,弄清楚绝对URI会更容易。