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