Django无法加载静态文件

时间:2018-02-13 21:53:02

标签: python django

django全新。

在我的settings.py文件中,我有:

STATIC_URL = '/static/'
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

我的urls.py有

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index)
]

我的views.py有

def index(request):
    return render(request, 'index.html', {})

最后,我在index.html中有以下内容:

{% load static %}
<link href="{% static 'styles/custom.css' %}" rel="stylesheet">

HTML文件加载如显示,但样式没有显示。在检查时,它说没有找到CSS文件。

这是我的目录结构:

.
├── README.md
├── app
│   ├── __init__.py
│   ├── db.sqlite3
│   ├── manage.py
│   ├── models.py
│   ├── settings.py
│   ├── urls.py
│   ├── views.py
│   └── wsgi.py
├── db.sqlite3
├── static
│   ├── scripts
│   │   └── custom.js
│   └── styles
│       └── custom.css
└── templates
    └── index.html

3 个答案:

答案 0 :(得分:2)

你必须告诉Django在哪里找到静态文件。这是通过在 settings.py 模块上设置STATICFILES_DIRS来完成的。

通常我们使用BASE_DIR

执行此类操作

<强> settings.py

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

有关静态设置的一些额外信息:

一开始有点令人困惑,因为Django有三种类似的配置:

  • STATIC_URL
  • STATIC_ROOT
  • STATICFILES_DIRS

基本上,STATIC_URL将用于生成提供静态资产的网址。它可能是一个像你一样的相对URL:

STATIC_URL='/static/'

{% static 'styles/custom.css' %} => /static/styles/custom.css

它可以是完整的网址:

STATIC_URL='https://static.yourdomain.com/'

{% static 'styles/custom.css' %} => https://static.yourdomain.com/styles/custom.css

现在,STATICFILES_DIRS是Django将找到静态文件的地方。它通常位于项目文件夹中。但!这不是Django将为您的静态资产提供到客户端的地方。就像,静态文件的来源

那是因为Django并不真正提供这种文件( .js .css .jpg )。嗯,无论如何不是默认的。您可以使用WhiteNoise等第三方应用。

这也是我们拥有STATIC_ROOT的原因,即告诉Django STATICFILES_DIRS复制这些文件的位置,以便其他人可以为我提供。这个人通常是Apache或NGINX。

我们只使用STATIC_ROOT进行部署。

当我们将Django应用程序部署到生产服务器时,我们通常运行命令python manage.py collectstatic。这就是Django将文件从STATICFILES_DIRS复制到STATIC_ROOT的地方。

但是在开发阶段你并不需要关心这么多细节,因为在DEBUG=True时,Django会让你更容易并提供静态文件。

答案 1 :(得分:0)

将这些添加到您的settings.py

STATIC_URL ='/ static /'

MEDIA_URL ='/ media /'

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

VENV_PATH = os.path.dirname(BASE_DIR)

STATIC_ROOT = os.path.join(VENV_PATH,'static_root')

MEDIA_ROOT = os.path.join(VENV_PATH,'media_root')

答案 2 :(得分:0)

这是settings.py代码:

lol = [['filiabus', 'filia +N +Abl +Sg', 'filia +N +Dat +Sg'], 
       ['canēs', 'canis +N +Acc +Pl', 'canis +N +Abl +Pl']]


def transform(sublist):
    first, *others = sublist
    return [first, *(item.split() for item in others)]

out = [transform(sublist) for sublist in lol]

print(out)
# [['filiabus', ['filia', '+N', '+Abl', '+Sg'], ['filia', '+N', '+Dat', '+Sg']], 
#  ['canēs', ['canis', '+N', '+Acc', '+Pl'], ['canis', '+N', '+Abl', '+Pl']]]