【问题标题】:Django accessing non-static files from static filesDjango 从静态文件访问非静态文件
【发布时间】:2017-12-23 03:46:38
【问题描述】:

我有一个 javascript 静态文件,我想在其中指定一个非静态 json 文件的源 URL。下面的好像不行(这里的根目录是django项目的根目录):

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

如果我明确(非理想地)指定一个绝对静态 json url,它会起作用:

source: {url: "static/default_GCMS.json"}

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

【问题讨论】:

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


    【解决方案1】:

    所以你想从一个静态 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" %}
    }
    

    【讨论】:

    • 所以在我的主视图中,我需要获取另一个返回全局变量的 url 创建视图,然后获取 js 文件。正确的?这对于动态创建 url 来说是完美的。问题是我的 url-creating 视图会生成一个类似于我在调试期间明确指出的那个 url (users/username1/nonstatic.json),我的静态文件似乎无法读取。
    • 视图会生成一个URL是什么意思?此外,如果 URL 存在,则静态文件也应该能够读取它。但是,请确保您使用绝对网址而不是相对网址。要检查从您的应用程序访问了哪些 URL,请使用 Chrome 开发工具网络选项卡并检查红色 404 错误。
    猜你喜欢
    • 2021-05-20
    • 2021-08-14
    • 1970-01-01
    • 2011-11-03
    • 2013-11-22
    • 2020-11-26
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    相关资源
    最近更新 更多