【问题标题】:Django not loading static files into assets fileDjango没有将静态文件加载到资产文件中
【发布时间】:2020-01-08 09:06:31
【问题描述】:

我最近开始了一个基本的 django 项目,我想加载一个已经制作好的默认模板。这个模板有一个包含所有 CSS、JS 文件等的 assets 文件夹

这个文件夹,稍后在模板中调用,所以例如我可以有:

<base href="../">
    // And a lot of static files being called like this:
<link href="./assets/scrollbar/css/scrollbar.css" rel="stylesheet" type="text/css" />
<link href="./assets/somecss.css" rel="stylesheet" type="text/css" />
// And so on..

<script src="./assets/somejsfile.js" type="text/javascript"></script>

这样做的问题是没有检索资产中的文件。我知道问题取决于我将资产文件夹放在哪里,但我不知道如何解决。我试图将它添加到我项目结构的不同部分,但它不起作用,因为我只收到很多这样的错误:

http://127.0.0.1:8000/assets/somecss.css net::ERR_ABORTED 404 (Not Found)

这是我的 settings.py

STATIC_URL = '/static/'

在这个静态文件夹中,有一个我在尝试之前测试过的基本 css 文件。

这是我的项目的结构:

 //MAIN FOLDER
    migrations
    ASSETS
    templates -> INDEX.HTML (where the assets folder is called)
    views, forms etc

【问题讨论】:

  • URL 和文件系统路径是有区别的。在 URL 中包含 ./ 没有意义。 URL 由 Web 服务器映射到文件系统位置,如果您在开发服务器上,则由 django runserver 映射。 STATIC_URL 告诉 django 静态文件的 URL 前缀是什么(如果你使用 {% static %} 模板标签,它会被添加到 URL 中)。 STATICFILES_DIRS 告诉 django 在哪里查找静态文件(除了默认使用的 static 应用程序目录),只要您使用 django.contrib.staticfiles 应用程序。
  • 并且不要将静态文件放在模板文件夹中。模板不是静态的,它们用于呈现最终的 HTML 响应。如果你这样做,你最终会发生冲突。
  • 感谢您的回答@dirkgroten。基本上,我的麻烦在于,由于我使用的是预制模板,因此我必须将调用静态内容的每一行基本上都更改为 django 调用静态内容的方式
  • 嗯……是的,不是的。如果您的所有静态链接都以/assets/ 开头,则将您的 STATIC_URL 设置为“/assets/”,并将您的 STATICFILES_DIRS 设置为包含 assets 目录(该目录也应该在 templates 之外)。这将在开发中起作用。但是预制模板中不应该有“./assets”,这不是 url 的工作方式,如果这样做,您的模板就不好。此外,它还难以在生产中扩展,因为这意味着您必须从为 Django 提供服务的同一 Web 服务器提供静态文件(例如,您将无法使用子域和 CDN)。
  • 无论如何,用正确的 {% static %} url 一次性替换所有以 ./assets 开头的静态 url 应该很容易。这就是文本编辑器所做的。

标签: django templates django-templates


【解决方案1】:

你读过documentation吗?

建议使用static template tag 使您的静态文件的文件系统位置独立于您的 URL。使用此标记,您的 URL 必须像这样定义:

{% load static %}
<link href="{% static 'assets/scrollbar/css/scrollbar.css' %}" 
      rel="stylesheet" type="text/css" />
<link href="{% static 'assets/somecss.css' %}"
      rel="stylesheet" type="text/css" />

您还需要定义设置STATICFILES_DIRS,因为看起来您的静态资产不在项目应用内的默认位置内。

【讨论】:

  • 是的,问题在于,正如我所说,我使用的是预先制作的默认模板,因此我需要将很多代码行更改为您建议的内容。我知道这是对的,只是我想知道是否有其他方法可以做到这一点
  • 您可以使用 IDE 中的搜索和替换工具(例如,ctrl-r in PyCharm)为您完成大部分工作;从长远来看,记录在案的使用static 的方式肯定会减少您的麻烦。
  • 知道了。谢谢!
猜你喜欢
  • 2021-05-20
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 2018-10-07
  • 1970-01-01
  • 2018-12-27
  • 2021-07-22
相关资源
最近更新 更多