Django的静态文件404

问题描述 投票:58回答:10

我不能让我的静态文件上来。我已经试过各种设置和目录结构等,但他们只是调高为404。我已经debug_toolbar安装,以便知道STATIC_URL是达到我的要求范围内。

目录结构显示/静态的(我也放在目录的饭菜应用程序文件夹内,和用户,只是为了尝试一下。

/mealmate
    /mealmate
    /meals
    /static
        /css
             /bootstrap.min.css
    /templates
    /users

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'

在base.html文件渲染

    <link rel="stylesheet" href="/static/css/bootstrap.min.css">

有任何想法吗?谢谢

django static http-status-code-404
10个回答
99
投票

这是在Django静态/媒体/模板访问适用于Windows的工作方案,

settings.朋友

import os.path

STATIC_ROOT = ''

STATIC_URL = '/static/'

STATICFILES_DIRS = ( os.path.join('static'), )

0
投票

我想你错过了把应用INSTALLED_APPS在你的settings.py文件,你应该添加“mealmate”

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

之后,静态和命令文件将是可见的Django的。我是有命令的麻烦,这是我固定的方式。


0
投票

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

python manage.py runserver

26
投票

对我来说,这竟然是由settings.py调试设置为false所致。一种解决方法是将--insecure开关传递给runserver,但真正的解决方案是使用适当的Web服务器提供静态文件。查看答案this question了解更多详情。


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',
)

然后你可以使用这个帖子Django static Files和静态文件复制到公共访问的文件夹使用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

希望帮助!


5
投票

我简单地添加相当于

STATICFILES_DIRS = (
    '/absolute_path_to_project/mealmate/static',
)

得到这个工作。当然,你的实际路径替换absolute_path_to_project,如有必要,添加驱动器号。


5
投票

我还停留在404问题,直到我意识到,阿帕奇封锁了该请求的静态目录。我用python manage.py collectstatic所有静态文件的静态目录下复制我的项目的根,也就是在/ var /我的/网站/静态的。同

Alias /static /var/my/site/static
<Directory /var/my/site/static>
        Require all granted
</Directory>

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

如果上述问题的答案的作品,你可以考虑检查您的服务器配置。


4
投票

确保mealmate是在你的INSTALLED_APPS


3
投票

从上述评论 - 运行此

python manage.py findstatic --verbosity 2 css/styles.css

没有匹配的文件发现“CSS / Styles.css中”。

展望在以下位置: /用户/提供yourname /文档/工作区/测试/ staticfiles

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

使用不安全的模式,如果你是在本地开发框可能不会伤害 - 否则,你仍然可以得到404错误。

python manage.py runserver --insecure

UPDATE

实际上挖掘到settings.py发现侵权线。

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'staticfiles'),
)

2
投票

我假设你正在使用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/'

这会帮助你找到该目录。

此外,你应该随时访问使用STATIC URL您的静态文件:

<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap.min.css">

2
投票

在Django你有你的模板一个好处,它是你可以喜欢这个链接静,也许这是你的问题!

<script src="{% static 'myapp/bootstrap.min.js' %}"></script>
<link href="{% static 'myapp/bootstrap.css' %}" rel="stylesheet" type="text/css"/>

它能够更好地使用

{%静态 '文件名' %}

其也更容易更多地了解,我指的是https://docs.djangoproject.com/en/1.11/intro/tutorial06/

© www.soinside.com 2019 - 2024. All rights reserved.