Python Django 2.2不提供静态文件

Python Django 2.2不提供静态文件,python,django,django-2.2,Python,Django,Django 2.2,我目前正在学习一些教程,以增强我对Django的了解。为此,我决定使用Django的最新版本。我已经能够克服我的代码和教程中的代码之间的大部分分歧,除了一个——没有提供静态文件。现在,我不能完全肯定这种差异是否完全是由Django版本造成的。下面是正在发生的事情 我有以下项目结构: 设置.py STATIC_URL = '/static/' STATIC_FILES = ( os.path.join(BASE_DIR, "static"), ) STATIC_ROOT = os.pa

我目前正在学习一些教程,以增强我对Django的了解。为此,我决定使用Django的最新版本。我已经能够克服我的代码和教程中的代码之间的大部分分歧,除了一个——没有提供静态文件。现在,我不能完全肯定这种差异是否完全是由Django版本造成的。下面是正在发生的事情

我有以下项目结构:

设置.py

STATIC_URL = '/static/'

STATIC_FILES = (
    os.path.join(BASE_DIR, "static"),
)

STATIC_ROOT = os.path.join (os.path.dirname(BASE_DIR), "staticfiles", "static")

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "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',
            ],
        },
    },
]
有趣的是,通过这种配置,项目能够成功地找到模板。但是,如上所述,它找不到静态文件。为什么呢

此外,本教程还设置了一个不寻常的配置,静态和模板目录位于主应用程序的目录中,而我通常将它们放在更高一级的目录中,即项目根目录中。这可能是问题的一部分吗?在这个特定项目的设置中,是什么让Django查找比它低一个目录的文件?设置似乎和我做的其他项目一样。但是,这些项目在项目的根目录中包含static和templates目录

感谢您的帮助和澄清

编辑:

url.py

from django.contrib import admin
from django.urls import path
from .views import home

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home, name='home')
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
尝试替换此:

STATIC_ROOT = os.path.join (os.path.dirname(BASE_DIR), "staticfiles", "static")

还提供404消息等文件的状态

尝试替换此文件:

STATIC_ROOT = os.path.join (os.path.dirname(BASE_DIR), "staticfiles", "static")


还提供404消息等文件的状态,以便为静态文件提供服务,您需要在URL.py中添加以下内容:

接下来,我相信在他们自己的应用程序中放置静态和模板是一个很好的实践,如果你想在不久的将来让应用程序可以插入,这是很有用的

或者,在项目级目录中收集所有静态文件,并在设置中添加以下内容以识别它也是一种好的做法

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
编辑:我刚刚看到更新的问题。尝试添加以下内容:

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home, name='home')
]

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

也就是说,只要我们处于调试模式,就可以为静态文件提供服务

要提供静态文件,您需要在URL.py中添加以下内容:

接下来,我相信在他们自己的应用程序中放置静态和模板是一个很好的实践,如果你想在不久的将来让应用程序可以插入,这是很有用的

或者,在项目级目录中收集所有静态文件,并在设置中添加以下内容以识别它也是一种好的做法

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
编辑:我刚刚看到更新的问题。尝试添加以下内容:

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home, name='home')
]

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

也就是说,只要我们处于调试模式,就可以为静态文件提供服务

据我所知,静态_文件对Django没有任何意义,尽管您可能将其用于其他目的

您定义STATIC_ROOT的方式是指向一个不存在的目录


据我所知,StackOverflow中有一个很好的引用,STATIC_文件对Django没有任何意义,尽管您可能将其用于其他目的

您定义STATIC_ROOT的方式是指向一个不存在的目录

StackOverflow中有一个很好的参考

请尝试以下方法:

STATIC_ROOT = os.path.join (BASE_DIR, "taskbuster", "static")
试试这个:

STATIC_ROOT = os.path.join (BASE_DIR, "taskbuster", "static")

我可以通过将设置更改为以下设置来解决此问题:

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

STATIC_ROOT = os.path.join (os.path.dirname(BASE_DIR), "static")
此外,在试图理解如何修复它时,阅读以下文档是很有帮助的

特别是,这清楚地解释了Django的所作所为:

默认设置将查找存储在STATICFILES\u DIRS设置中的文件 使用django.contrib.staticfiles.finders.FileSystemFinder和 使用的每个应用程序的静态子目录 django.contrib.staticfiles.finders.AppDirectoriesFinder。如果多个 存在同名文件,即找到的第一个文件 将使用


我可以通过将设置更改为以下设置来解决此问题:

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

STATIC_ROOT = os.path.join (os.path.dirname(BASE_DIR), "static")
此外,在试图理解如何修复它时,阅读以下文档是很有帮助的

特别是,这清楚地解释了Django的所作所为:

默认设置将查找存储在STATICFILES\u DIRS设置中的文件 使用django.contrib.staticfiles.finders.FileSystemFinder和 使用的每个应用程序的静态子目录 django.contrib.staticfiles.finders.AppDirectoriesFinder。如果多个 存在同名文件,即找到的第一个文件 将使用


那没用。事实上,这一行是我在努力工作时添加的。试着将静态目录向上移动一级,然后再试一次。对不起,你能试着在你的设置中添加这一行吗:STATICFILES\u DIRS=os.path.joinBASE\u DIR,“static”,而不是static\u roots这没有帮助。事实上,这一行是我在尝试工作时添加的。尝试将静态目录向上移动一级,然后再试一次。对不起,您可以尝试将其放入您的设置中:STATICFILES\u DIRS=os.path.joinBASE\u DIR,“static”,而不是static\u ROOTI已进行编辑。请查看我的现有URL.py我已进行了编辑。请查看我的现有URL.py