【问题标题】:django not serving static filesdjango 不提供静态文件
【发布时间】:2013-12-15 11:48:35
【问题描述】:

我正在使用Django==1.5.5,我的 django 应用程序的结构为

--project/
----project/
------settings.py
------urls.py
----app1/
------models.py
------views.py
----staticfiles/
------style.css
----static/
------admin/
--------js/
--------css/
------style.css
----templates/
------header.html
------post.html
------footer.html
----manage.py

/project/settings.py

import os    
DEBUG = False
TEMPLATE_DEBUG = DEBUG    
PROJECT_ROOT = os.path.join(os.path.dirname(__file__), '..')    
ALLOWED_HOSTS = ['localhost', '127.0.0.1']    
MEDIA_ROOT = ''    
MEDIA_URL = ''    
SITE_ROOT = PROJECT_ROOT    
STATIC_ROOT = os.path.join(SITE_ROOT, 'static')    
STATIC_URL = '/static/'    
STATICFILES_DIRS = (
    os.path.join(SITE_ROOT, 'staticfiles'),
)    
TEMPLATE_DIRS = (
    os.path.join(SITE_ROOT, 'templates'),
)

header.html 我尝试将其用作:

    <head>
        <title>My Site</title>
        {% load static from staticfiles %}
        <link rel="stylesheet" href="{% static 'style.css' %}">
    </head>

但它没有加载 mysite.com/static/style.css 并给出错误 404

我运行python manage.py collectstatic 收集所有静态文件。

为什么要加载css文件?是否缺少任何配置?

请提出建议。

【问题讨论】:

  • 您是通过内部开发服务器运行 django 还是通过网络服务器作为 nginx 或 apache 运行 django?
  • 您要转向生产吗? DEBUG = False时,需要自己处理静态文件。只有DEBUG = True django 才会为你处理静态文件。
  • @BurhanKhalid 有什么建议吗?
  • 请看serving static files in production;如果您处于开发模式(使用runserver),则设置DEBUG = True

标签: python django


【解决方案1】:

我遇到了同样的问题,但我找到的答案都没有。 事实证明,必须正确设置一些部分才能使静态文件正常工作。 注意:我使用的是 django 1.6,这个解决方案是用于开发而不是部署。

设置静态文件目录

django-admin.py startproject $site_name
mkdir $site_name/static
mkdir $site_name/static/css
mkdir $site_name/static/javascript
mkdir $site_name/static/images

您的文件夹应如下所示

$site_name/
    manage.py
    $site_name/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    static/
        css/
        javascript
        images/

编辑 $site_name/$site_name/setting.py 文件并添加

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS =( os.path.join(STATIC_ROOT, 'css/'),
                    os.path.join(STATIC_ROOT, 'javascript/'),
                    os.path.join(STATIC_ROOT, 'images/')
                  )

编辑 $site_name/$site_name/urls.py 并添加

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

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

使用静态网址

{% load staticfiles %}
<a href="{% static "banner.png" %}">

【讨论】:

    【解决方案2】:

    仅用于开发。在 settings.py 文件中设置 DEBUG = True 并在 INSTALLED_APPS 中添加 'django.contrib.staticfiles'。 接下来,将这些代码行添加到项目的 settings.py 文件中:

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

    【讨论】:

      【解决方案3】:

      根据docs正确加载静态文件的方法是

      {% load staticfiles %}
      <img src="{% static 'my_app/myexample.jpg' %}" alt="My image"/>
      

      这会起作用

      【讨论】:

      • 我的静态文件不在my_app
      【解决方案4】:

      Django 永远不会从 STATIC_ROOT 提供文件。 STATIC_ROOT 的全部目的是将所有内容存储在生产级别使用的文件夹中。我花了5个小时研究这个,我终于明白了。关于开发模式,我将详细介绍所有内容。

      人们会尝试告诉您,您需要将所有这些内容添加到您的 urls.py 中,而您真正需要做的只是添加以下内容。

      1. 将此添加到 settings.py 中的 INSTALLED_APPS 列表中。

      'django.contrib.staticfiles'
      1. 至少您的一个应用程序需要有一个名为 static 的文件夹,并将您的静态文件放在那里。我建议在每个应用程序中创建一个名为 static 的文件夹以及另一个以应用程序命名的文件夹,以便您这样做

      {% static '&lt;app_name&gt;/blah.js' %}
      1. 如果您有更多 js 文件,则将该文件夹添加到 settings.py 中的 STATICFILES_DIRS 列表中。例如,我有一个名为 js_imports 的文件夹,我在其中执行 npm install 并将所有这些文件存储在那里。

      STATICFILES_DIRS = [
        '/home/user/js_imports/node_modules'
       ]

      现在,python manage.py collectstatic 到底是用来做什么的?

      这用于收集在您的任何应用程序中名为 static 的文件夹中找到的所有文件以及 STATICFILES_DIRS 中的文件,并将它们放入 STATIC_ROOT 目录。现在您的所有静态文件都方便地放在一个文件夹中,您可以使用 apache 之类的东西在生产过程中以更有效的方式为它们提供服务。

      轰隆隆!

      如果您不相信我,请理解我,或者我错过了任何仔细阅读本文并尝试https://docs.djangoproject.com/en/4.0/howto/static-files/

      最后一点。 Django 在它为您生成的代码中方便地放置注释链接,指向您需要为应用程序的每个部分执行的操作。

      【讨论】:

        猜你喜欢
        • 2021-07-08
        • 2021-12-02
        • 2019-10-24
        • 2020-09-14
        • 1970-01-01
        • 1970-01-01
        • 2014-07-25
        • 2016-01-28
        相关资源
        最近更新 更多