Django从静态文件访问非静态文件

时间:2017-07-18 10:23:29

标签: javascript json django django-templates django-staticfiles

我有一个javascript静态文件,我希望在其中指定非静态json文件的源URL。以下似乎不起作用(这里的根目录是django项目的根目录):

source: {url: "users/username1/nonstatic.json"}

如果我明确地(并且非理想地)指定绝对静态json url:

,它就有效
source: {url: "static/default_GCMS.json"}

我想知道从静态文件中调用非静态文件的正确方法是什么(本例中为.js)。

1 个答案:

答案 0 :(得分:0)

所以你想从静态JS文件中调用django视图。这是一个相当普遍的问题 - 要解决它,你需要将django模板逻辑与静态JS混合搭配。

一个简单的解决方案是将您想要调用的视图的URL分配到django模板中的全局JS变量之前,包括静态JS文件,然后使用该变量。所以,你的django模板就是这样的

<script>
  var g_djangoViewUrl = '{% url "my_django_view_url %}';
  // Notice that g_djangoViewUrl is global (assigned to your window object) so will be visible from other JS files
</script>
<script src='the_js_file_that_will_use_the_url.js'></script>

以上问题是您需要记住在包含js文件之前定义所需的URL。更加结构化和永久的解决方案是创建一个django-view,其唯一目的是输出一个全局对象,该对象将包含您将从其他JS文件中使用的所有URL。所以,你的模板中会有这样的东西

<script src='{% url "my_url_creating_view" %}'></script>
<script src='the_js_file_that_will_use_the_url.js'></script>

my_url_creating_view应该有正确的内容类型(application/javascript),并且应该返回一个这样的对象:

var g_URLS = {
    djangoView1: {% url "django_view_1" %},
    djangoView2: {% url "django_view_2" %}
}