93

我无法让我的静态文件出现。我已经尝试了各种设置和目录配置等,但它们只是显示为 404。我已经安装了 debug_toolbar,所以知道 STATIC_URL 正在到达我的请求上下文。

显示 /static 的目录结构(我也将目录放在了餐应用文件夹和用户中,只是为了尝试一下。

/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">

有任何想法吗?谢谢

4

21 回答 21

144

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

设置.py

import os.path

STATIC_ROOT = ''

STATIC_URL = '/static/'

STATICFILES_DIRS = ( os.path.join('static'), )
于 2013-06-13T06:49:17.530 回答
71

对我来说,这是由于将 debug 设置为 false in 引起的settings.py。一种解决方法是将--insecure开关传递给runserver,但真正的解决方案是使用适当的 Web 服务器来提供静态文件。有关更多详细信息,请参阅此问题的答案。

于 2016-12-09T13:35:49.230 回答
23

如果您在 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

希望有帮助!

于 2012-11-11T18:56:51.287 回答
13

从上面的评论 - 运行这个

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

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

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

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

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

python manage.py runserver --insecure

更新

实际上深入研究 settings.py 发现了侵权行。

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'staticfiles'),
)
于 2018-03-22T14:05:46.127 回答
11

如果您最近在设置文件中将调试更改为 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

它应该工作。

于 2019-10-08T17:36:55.743 回答
8

我只是添加了相当于

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

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

于 2013-08-12T00:26:44.210 回答
8

我也陷入了 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>

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

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

于 2016-01-03T04:25:48.987 回答
6

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

python manage.py runserver
于 2019-08-01T13:11:50.960 回答
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/'

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

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

<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap.min.css">
于 2012-10-10T00:36:59.980 回答
4

确保 mealmate 在您的 INSTALLED_APPS 中

于 2013-11-25T03:13:35.137 回答
4

在下面添加setting.py

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]
于 2020-03-30T05:08:55.443 回答
4

在 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/

于 2017-05-05T08:56:56.993 回答
2

在我的情况下,我的静态文件在resources/static目录中,我设置了一些设置,例如settings.py文件中的吹气:

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, './resources/static/'),
)

并像这样在我的模板中使用它:

% load static %}
    <link rel="stylesheet" type="text/css" href="{% static '/plugins/bootstrap/css/bootstrap.css' %}">

这种方式对我有用。

于 2020-10-23T08:52:31.960 回答
2

如果您遇到此错误,请首先检查调试的真假,以及您是否同时使用“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)
于 2021-10-04T08:09:31.497 回答
1

在您的设置中将 DEBUG 变量更改为 True。

如果启用了调试,runserver 方法只查找静态,如果没有,它将在 STATIC_ROOT url 中查找

于 2021-09-22T17:51:37.187 回答
1

将以下行插入项目主文件夹的 settings.py 中:

STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join('static'))

然后,在 html 文件中插入:

{% load static %}

最后,在 settings.py 中,添加django.contrib.staticfilesINSTALLED_APPS = [...]

于 2021-05-09T01:16:49.643 回答
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 可见。我在使用命令时遇到问题,这就是我修复它的方式。

于 2019-02-11T07:10:21.203 回答
0

对我来说,除了运行 manage.py runserver myip:port 什么都不做。然后我关闭它并重新启动uwsgi,静态文件加载成功。我不知道为什么,但它对我有用......

于 2020-08-31T07:39:46.583 回答
0

我面临同样的问题。这里我如何解决在模板中访问静态文件的问题。

我的 Django 项目(识别/)文件目录如下所示:

/media
   /1
     i1.jpg
     i2.jpg
     ....

/static
    /css
       /op.css
    /img
       /emoji.png

/Recognition
    ...
    /settings.py
    /urls.py
    ...

/uploader
    ...
    /urls.py
    /templates
         /uploader
             /create.html
    ...

我的 settings.py 看起来像这样:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'Recognition',
    'uploader',
]

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

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

我的 (Recognition/urls.py) 看起来像这样:

urlpatterns = [
    path('admin/', admin.site.urls),
    ...
]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

然后我像这样访问模板(create.html)中的所有静态文件和媒体文件:这是示例代码

<!DOCTYPE html>
<html>
<head>
   {% block extrahead %}
      <link rel="stylesheet" type="text/css" href="static/css/op.css">
   {% endblock %}
</head>

<style type="text/css">
.notfound .notfound-404 {
  ...
  background-image: url('static/img/emoji.png');
  ...
}
<style>

<body>
  <img src="{{ MEDIA_ROOT }}/media/i1.jpg" class="image_responsive" height="100px" width="100px">
</body>

或者

你可以使用这个 django 命令来查看 django 在哪里看到你的静态文件。资源

python manage.py collectstatic --help
于 2020-05-19T12:06:34.717 回答
0

在 Cpanel 上,这是一个很好的解决方案

在 cpanel 的终端上安装 dj-static static3

pip install dj-static static3

然后在 wsgi.py 替换此代码 py 应用程序

from dj_static import Cling

application = Cling(get_wsgi_application())
于 2020-04-16T07:53:35.187 回答
0

我能够通过将 js 文件名从骆驼案例更改为蛇案例来解决同样的问题。

于 2021-11-03T17:31:23.420 回答