【问题标题】:Django serving static files locallyDjango 在本地提供静态文件
【发布时间】:2018-04-17 09:20:30
【问题描述】:

自从我将 django 设置为在本地工作以来已经有一段时间了。我正在使用版本1.11。让它为静态文件提供服务。 我的项目名为chatsys,我在该文件夹chatsys\static\css\style.css 中创建了静态文件夹和css。

这是设置文件中的当前设置。

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

在网址中

#for serving static files
from django.conf import settings
from django.conf.urls.static import static
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

最后在 html 中

{% load static %}
...
<link rel="stylesheet" type="text/css" href="/static/css/style.css">

但是在 runserver 控制台中,/static/css/style.css 得到 404

【问题讨论】:

  • 您是否正在使用DEBUG=True 进行开发? style.css 文件在哪里?如果您打印/记录STATIC_ROOT,它会给您正确的位置吗?
  • 是的,debug = True 并且 css 文件位于主目录中的 chatsys\static\css\style.css 中。打印路径看起来没问题...它是&lt;full_path&gt;\chatsys\static
  • 我对你的项目布局还不是很清楚。 STATIC_ROOT是在项目目录(包含manage.py的那个)还是内部目录(包含settings.py的那个)?您的STATIC_ROOT 已针对第一种情况设置。
  • 在包含manage.py的项目目录中

标签: django


【解决方案1】:

您应该定义STATICFILES_DIRS 并在其中包含您项目的静态目录。

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

这些是 Django 从中收集静态文件的目录。

然后您应该将STATIC_ROOT 更改为不同的目录。它是collectstatic 收集静态文件的目录。静态根不应受版本控制。

顺便说一句,您正在模板中加载静态标签,但没有使用它。您可以将其更改为:

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

【讨论】:

  • 说到点子上,你搞定了 :) 我会坚持不使用load static 我试图用它来调试,看看能不能解决它。
  • 目前,使用{% static %} 还是硬编码/static/ 并不重要。但是,如果您将来更改 STATIC_URL(例如使用 CDN),那么如果您使用 {% static %},则无需更新所有模板。
  • 我知道,它只是为了一个项目,试图看看我是否可以制作一个聊天系统,所以很可能不会被托管。好在我还是倾向于在 nginx 中使用相同的路径。
【解决方案2】:

将你的静态文件夹移动到基本目录下

  • 聊天系统
    • 迁移
    • 模板
  • 静态
    • CSS
      • style.css

【讨论】:

  • 请您尝试删除{% load static %} 好吗?
  • 试过了,没用。这是有问题的配置的一部分。
  • STATIC_ROOT之后尝试添加这一行STATICFILES_DIRS = [ STATIC_ROOT, ]