Django Static文件404

Kin*_*Guy 60 django static http-status-code-404

我无法得到我的静态文件.我尝试了各种设置和目录配置等等,但它们只是变成404s.我安装了debug_toolbar,因此知道STATIC_URL正在到达我的请求上下文.

目录结构显示/静态(我还将目录放在饭菜app文件夹和用户内部,只是为了试一试.

/mealmate
    /mealmate
    /meals
    /static
        /css
             /bootstrap.min.css
    /templates
    /users
Run Code Online (Sandbox Code Playgroud)

Settings.py(一些重要的设置,虽然我已尝试过各种其他设置):

MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media/')

STATIC_URL = '/static/'

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

WSGI_APPLICATION = 'mealmate.wsgi.application'
Run Code Online (Sandbox Code Playgroud)

在base.html中呈现

    <link rel="stylesheet" href="/static/css/bootstrap.min.css">
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢

Ama*_*the 104

这是django for windows中静态/媒体/模板访问的工作解决方案,

settings.py

import os.path

STATIC_ROOT = ''

STATIC_URL = '/static/'

STATICFILES_DIRS = ( os.path.join('static'), )
Run Code Online (Sandbox Code Playgroud)

  • `os.path.join('static')`给出了简单的`'static'` (6认同)
  • 谢谢,太棒了!有关其他信息,请访问http://blog.xjtian.com/post/52685286308/serving-static-files-in-django-more-complicated-than这个博客,非常实用的描述如何在django中使用static. (4认同)
  • @cirrusio STATIC_ROOT实际上是我所需要的.我正在按照教程,无法加载静态文件.我只是添加了STATIC_ROOT =''行,它就开始工作了.我不需要任何其他更改. (3认同)

Art*_*cca 29

对我来说,结果是将调试设置为false settings.py.解决方法是将--insecure交换机传递给runserver,但真正的解决方案是使用适当的Web服务器来提供静态文件.有关详细信息,请参阅此问题的答案.

  • 伙计。经过几个小时的尝试,这解决了这个问题。谢谢 (4认同)
  • 这个问题有多蠢?在将一些更改投入生产并设置 Debug = False 之后,我的开发环境突然停止提供静态文件,我花了几个小时才找到这个解决方案。这应该记录在某处或在日志中给出明确的警告。 (3认同)
  • 谢谢++我快疯了。 (2认同)
  • 这!非常感谢,几乎疯狂地调试我的静态文件...... (2认同)

eod*_*och 21

如果您在Web服务器上运行此操作,您是否将静态文件复制到公共可访问文件夹?例如:

# web accessible folder
STATIC_ROOT = '/home/your_name/www/mealmate/static/'

# URL prefix for static files.
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # location of your application, should not be public web accessible 
    '/home/your_name/website/mealmate/static',
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用此文章Django静态文件,并使用manage.py将静态文件复制到公共可访问文件夹

# --link    Create a symbolic link to each file instead of copying.
# --noinput Do NOT prompt the user for input of any kind.
#
python manage.py collectstatic -link --noinput
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!


joh*_*ope 11

从上面的评论 - 运行这个

python manage.py findstatic --verbosity 2 css/styles.css
Run Code Online (Sandbox Code Playgroud)

找不到与“css/styles.css”匹配的文件。

查看以下位置:
/Users/yourname/Documents/Workspace/test/staticfiles

我只是改名为我的静态文件夹staticfiles,一切都很好。(我在 osx + django 1.x 上)

如果您在本地开发设备上,使用不安全模式可能不会受到伤害 - 否则您可能仍会收到 404 错误。

python manage.py runserver --insecure
Run Code Online (Sandbox Code Playgroud)

更新

实际上挖掘 settings.py 发现了侵权行。

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'staticfiles'),
)
Run Code Online (Sandbox Code Playgroud)


Kun*_*nal 9

如果您最近在设置文件中将调试更改为 false。遵循此程序。

大多数情况下是由于settings.py 中的调试设置为false 导致的。如果您将 --insecure 开关传递给 runserver,它应该可以工作。因此,如果您确实python manage.py runserver 0.0.0.0:8000将其更改为python manage.py runserver 0.0.0.0:8000 --insecure

它应该工作。

  • 通过阅读文档,我认为 django 将在开发模式打开时提供静态服务。另一方面,对于开发模式关闭,您应该真正使用 nginx,因为 django 提供静态服务效率低下。上面的标志意味着您承认这一事实。 (2认同)
  • 这个错误信息应该比较明显一点,浪费时间去寻找问题,谢谢您的解答 (2认同)

小智 7

如果您遇到此错误,请首先检查调试是否正确,以及您是否同时使用“STATIC_ROOT”和“STATICFILES_DIRS”

对于我的情况,我在 settings.py 中使用了以下内容:

import os #(You have to import os at first)
    
#(If the app is in production mode then False. By default True)

DEBUG = False 

#(If debug is false then add allowed hosts)

ALLOWED_HOSTS = ['*'] 

#(Built in)

STATIC_URL = '/static/' 

STATIC_ROOT = 'static' (You have to add it to the code)

STATICFILES_DIRS = [ os.path.join(BASE_DIR, '/static') ] (You have to add it to the code)
Run Code Online (Sandbox Code Playgroud)


Set*_*eth 6

我只是添加了相当于

STATICFILES_DIRS = (
    '/absolute_path_to_project/mealmate/static',
)
Run Code Online (Sandbox Code Playgroud)

让这个工作.当然,请替换absolute_path_to_project为您的实际路径,并在必要时添加驱动器号.


Dav*_*vic 6

就我而言,我所要做的就是重新运行服务器:

python manage.py runserver
Run Code Online (Sandbox Code Playgroud)


dre*_*man 5

我假设您在这里使用的是 Django1.3+。

首先,您需要定义更多设置:

STATICFILES_FINDERS = [
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]

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

STATIC_ROOT = path.join(TOP_DIR, 'staticfiles')
STATIC_URL = '/static/'
Run Code Online (Sandbox Code Playgroud)

这应该可以帮助您找到该目录。

此外,您应该始终使用STATIC URL以下方式访问您的静态文件:

<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap.min.css">
Run Code Online (Sandbox Code Playgroud)


小智 5

我也陷入了404问题,直到我意识到Apache已经阻止了对静态目录的请求.我曾经python manage.py collectstatic将所有静态文件复制到项目根目录下的静态目录,即/ var/my/site/static.同

Alias /static /var/my/site/static
<Directory /var/my/site/static>
        Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

/etc/httpd/conf/httpd.conf中,它现在正常工作.

如果上述答案都不起作用,您可以考虑检查服务器配置.


yas*_*ini 5

添加下面的setting.py

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
Run Code Online (Sandbox Code Playgroud)