无法在Django模板中加载静态文件

时间:2020-06-12 09:03:14

标签: python css django django-staticfiles django-3.0

首先,我知道StackOverflow中还有更多类似的问题。但是它们似乎都不起作用。所以去了...

我正在通过此tutorial学习django。该教程有点陈旧,但是大多数代码是相同的。我曾尝试像本教程一样向项目中添加一些CSS文件,但由于某种原因,它对我不起作用。这是我的文件结构...

src
    ├── assets
    │   └── css
    │       ├── base_styles.css
    │       └── index_styles.css
    ├── core
    │   ├── __init__.py
    │   ├── __pycache__
    │   │   ├── __init__.cpython-37.pyc
    │   │   ├── settings.cpython-37.pyc
    │   │   ├── urls.cpython-37.pyc
    │   │   ├── views.cpython-37.pyc
    │   │   └── wsgi.cpython-37.pyc
    │   ├── asgi.py
    │   ├── settings.py
    │   ├── urls.py
    │   ├── views.py
    │   └── wsgi.py
    ├── db.sqlite3
    ├── manage.py
    ├── test_app
    │   ├── __init__.py
    │   ├── __pycache__
    │   │   ├── __init__.cpython-37.pyc
    │   │   ├── admin.cpython-37.pyc
    │   │   ├── models.cpython-37.pyc
    │   │   ├── urls.cpython-37.pyc
    │   │   └── views.cpython-37.pyc
    │   ├── admin.py
    │   ├── apps.py
    │   ├── migrations
    │   │   ├── __init__.py
    │   │   └── __pycache__
    │   │       └── __init__.cpython-37.pyc
    │   ├── models.py
    │   ├── templates
    │   │   └── test_app
    │   │       └── test_app_home.html
    │   ├── tests.py
    │   ├── urls.py
    │   └── views.py
    └── templates
        ├── aboutpage.html
        ├── base.html
        └── homepage.html

请注意,src是根文件夹。 core是项目的名称,test_app是应用程序的名称

全局模板位于src/templates/下。 src/assets/css/包含用于全局模板的css文件。

这是我的settings.py代码

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

...
...

STATIC_URL = '/static/'

STAITCFILES_DIRS = (
    os.path.join(BASE_DIR, "assets"),
)

这是我的core/urls.py文件

from django.contrib import admin
from django.urls import path, include
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test_app/', include('test_app.urls')),

    path('about', views.aboutpage),
    path('', views.homepage),
]

urlpatterns += staticfiles_urlpatterns()

这是我的base.html文件。

{% load static %}

...
...

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

...
...

我做了本教程所做的一切。我不确定为什么这行不通。可能是因为该教程有点 old 而我正在使用django 3.0.4吗?我可以在两个版本之间做的唯一区别是使用{% load static %}而不是{% load staticfiles %}

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

在开发模式下,还添加一个static_root:

STATIC_ROOT = os.path.join(BASE_DIR, 'static_cdn')

然后收集您的文件

python manage.py collectstatic 

您的浏览器也会起作用,因此请尝试运行隐身或隐身模式。

在官方文档中,它们提供如下的静态文件

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)