【问题标题】:Django -- Can't get static CSS files to loadDjango - 无法加载静态 CSS 文件
【发布时间】:2011-11-26 08:21:19
【问题描述】:

我在本地机器 (Mac OS X) 上运行 Django 的开发服务器 (runserver),无法加载 CSS 文件。

这里是settings.py中的相关条目:

STATIC_ROOT = '/Users/username/Projects/mysite/static/'

STATIC_URL = '/static/'

STATICFILES_DIRS = (
'/Users/thaymore/Projects/mysite/cal/static',
)

STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

INSTALLED_APPS = (
# other apps ...
'django.contrib.staticfiles',
)

在我的 views.py 中,我请求上下文:

return render_to_response("cal/main.html",dict(entries=entries),context_instance=RequestContext(request))

在我的模板中,{{ STATIC_URL }} 正确呈现:

<link type="text/css" href="{{ STATIC_URL }}css/main.css" />

变成:

<link type="text/css" href="/static/css/main.css"/>

文件实际所在的位置。我还运行了collectstatic 以确保收集了所有文件。

我的 urls.py 中还有以下几行:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns += staticfiles_urlpatterns()

我是 Django 新手,所以可能缺少一些简单的东西——希望能提供任何帮助。

【问题讨论】:

标签: python django static-files


【解决方案1】:

转到您的 HTML 页面加载静态

{% load static %}

现在我犯的唯一错误是这个

我的代码:

<img src="**{% static** "images/index.jpeg" %}" alt="My image">

更新:

<img src=**"{% static 'images/index.jpeg' %}' alt="My image"**>

你说对了

【讨论】:

  • 这是answered nine years ago by @GDorn。这个答案不仅被接受,而且得到了社区的验证。从那时起,其他 18 人提供了额外的答案——包括另一个引用相同语法的 highly rated answer from @all-Іѕ-vаиітy。你的回答对谈话有什么帮助?为什么有人可能更喜欢这种方法而不是讨论的其他方法?请编辑您的答案,以帮助读者理解为什么会有所不同。
【解决方案2】:

在 Django 应用程序中运行静态文件需要注意的两个基本点是 - 在 settings.py 文件中声明静态文件路径

STATIC_URL = '/static/'

另外一个重要的参数是你使用static关键字的网页,你需要加载静态文件。

{% load static %}

【讨论】:

  • 欢迎来到 Stack Overflow。在回答已接受答案的旧问题(寻找绿色✓)以及其他答案之前,请确保您的答案添加了新内容或对它们有帮助。这是How to Answer 的指南。
【解决方案3】:

对于 Django 的最新版本,您必须将 settings.py 中的静态文件配置为,

STATIC_URL = '/static/' # the path in url

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

并与静态模板标签一起使用,

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

【讨论】:

  • 为我工作! +1
  • 这个答案帮我弄明白了
  • Django 2.0 相同
  • 为我工作!如果您有多个从一个主 html 页面扩展而来的页面,则需要将这些页面添加到所有页面。
【解决方案4】:

在 settings.py 中添加以下内容

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

【讨论】:

  • 您能解释一下为什么会这样吗?这将使它成为一个更好的答案。
【解决方案5】:

我有同样的问题(ununtu 16.04 服务器)。

这对我有帮助

python manage.py collectstatic --noinput

【讨论】:

    【解决方案6】:

    如果您设置 DEBUG=FALSE 您需要按照步骤进行操作

    在您的 urls.py 文件中: 添加这一行

    from django.views.static import serve
    
    url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}),
    url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),
    
    

    【讨论】:

      【解决方案7】:

      您可以设置 STATIC_ROOT,具体取决于您是在本地主机上还是在服务器上运行。要确定这一点,请参阅此post。

      您可以将 STATIC_ROOT 配置重写为:

      import sys
      
      if 'runserver' in sys.argv:
          STATIC_ROOT = ''
      else:
          STATIC_ROOT = os.path.join(BASE_DIR, 'static')
      STATIC_URL = '/static/'
      

      【讨论】:

        【解决方案8】:

        请仔细阅读: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/

        django.contrib.staticfiles 在你的INSTALLED_APPS 中在settings.py 中吗?

        是DEBUG=False?如果是这样,您需要使用--insecure 参数调用runserver:

        python manage.py runserver --insecure
        

        collectstatic 与通过开发服务器提供文件无关。它用于将静态文件收集在一个位置 STATIC_ROOT 以便您的 Web 服务器找到它们。事实上,运行collectstatic 并将STATIC_ROOT 设置为STATICFILES_DIRS 中的路径是一个坏主意。您应该仔细检查以确保您的 CSS 文件现在仍然存在。

        【讨论】:

        • 是的,django.contrib.staticfiles 在 INSTALLED_APPS 中(我在上面编辑了问题),并且 DEBUG = True,我已经使用 --insecure 参数启动了服务器,但没有运气。
        • 尝试直接加载其中一个静态网址。是 404 还是 500?
        • 是的,我可以直接导航到 css:127.0.0.1:8000/static/css/main.css。加载就好了。
        • 在加载整个页面时观察 runserver 的输出。应该有一个对 /static/css/main.css 的请求,它的状态码应该是 200。
        • 我有同样的问题,我得到 404 未找到。我该怎么办?
        【解决方案9】:

        将以下代码添加到您的settings.py:

        STATICFILES_DIRS = [
            os.path.join(BASE_DIR, "static"),
        ]
        

        之后,在项目的根目录下创建静态文件夹。

        要在模板上加载静态文件,请使用:

        {% load static %}
          <img src="{% static "images/index.jpeg" %}" alt="My image"/>
        

        【讨论】:

          【解决方案10】:

          添加

          PROJECT_ROOT = os.path.normpath(os.path.dirname(__file__))
          STATICFILES_DIRS = ( os.path.join(PROJECT_ROOT, "static"), )
          

          并从settings.py 中删除STATIC_ROOT,它对我有用

          【讨论】:

            【解决方案11】:

            在你的 settings.py 中添加这个 "django.core.context_processors.static", 上下文处理器

            TEMPLATE_CONTEXT_PROCESSORS = (
            "django.core.context_processors.static",
            

            )

            【讨论】:

              【解决方案12】:

              我试过这个模型,它很有效。

              根据使用 shell 创建的 django 项目更改设置

              "django-admin.py startproject xxx"# here xxx is my app name
              

              修改文件夹如下结构加载我们的静态文件以在服务器上运行

              xxx的结构是:

              >     .
              >     |-- manage.py
              >     |-- templates
              >     |   `-- home.html
              >     `-- test_project
              >         |-- __init__.py
              >         |-- settings.py
              >         |-- static
              >         |   |-- images
              >         |   |   `-- 01.jpg
              >         |   |-- style.css
              >         |-- urls.py
              >         `-- wsgi.py
              

              - Settings.py 中的修改

              import os
              INSTALLED_APPS = (    'xxx',# my app is to be load into it)
              
              STATIC_ROOT = ''
              STATIC_URL = '/static/'
              PROJECT_DIR = os.path.dirname(__file__)
              TEMPLATE_DIRS = (      os.path.join(PROJECT_DIR, '../templates'),)#include this 
              

              - urls.py 中的修改

              from django.conf.urls import patterns, include, url
              from django.views.generic import TemplateView
              
              class DirectTemplateView(TemplateView):
                  extra_context = None
                  def get_context_data(self, **kwargs):
                      context = super(self.__class__, self).get_context_data(**kwargs)
                      if self.extra_context is not None:
                          for key, value in self.extra_context.items():
                              if callable(value):
                                  context[key] = value()
                              else:
                                  context[key] = value
                      return context
              
              urlpatterns = patterns('', 
                  url(r'^$', DirectTemplateView.as_view(template_name="home.html")), )
              

              - home.html

              <html>
                  <head>
                      <link href="{{STATIC_URL}}style.css" rel="stylesheet" type="text/css">
                  </head>
                  <body>
                      <h1>This is home for some_app</h1>
                    <img src="{{STATIC_URL}}/images/01.jpg" width=150px;height=150px; alt="Smiley ">
                  </body>
              </html>
              

              【讨论】:

                【解决方案13】:

                这些步骤对我有用,请参阅Load Static Files (CSS, JS, & Images) in Django

                我使用 Django 1.10。

                1. 在settings.py的同级创建一个文件夹static,我的settings.py的路径是~/djcode/mysite/mysite/settings.py,所以这个目录是~/djcode/mysite/mysite/static/;
                2. 在static中创建两个文件夹static_dirs和static_root,即~/djcode/mysite/mysite/static/static_dirs/和~/djcode/mysite/mysite/static/static_root/;
                3. 像这样写settings.py:

                  # Static files (CSS, JavaScript, Images)
                  
                  # https://docs.djangoproject.com/en/1.10/howto/static-files/
                  
                  STATIC_URL = '/static/'
                  
                  STATIC_ROOT = os.path.join(BASE_DIR, 'mysite', 'static', 'static_root')
                  
                  STATICFILES_DIRS = (
                      os.path.join(BASE_DIR, 'mysite', 'static', 'static_dirs'),
                  )
                  
                4. 在shell中执行此命令$ python manage.py collectstatic;

                5. 在static_dirs中创建一个文件夹css并放入你自己的.css文件中,你的css文件的路径是~/djcode/mysite/mysite/static/static_dirs/css/my_style.css;

                6. 更改.html文件中的&lt;link&gt;标签:&lt;link rel="stylesheet" type="text/css" href="{% static 'css/my_style.css' %}"&gt;,

                最后这个链接的路径是http://192.168.1.100:8023/static/css/my_style.css

                宾果游戏!

                【讨论】:

                  【解决方案14】:

                  另一个简单的尝试是停止,然后重新启动服务器,例如

                  $ python manage.py runserver
                  

                  我查看了其他答案,但重新启动服务器对我有用。

                  【讨论】:

                  • $ python manage.py runserver --insecure 使用 Google App Engine 为我的本地服务器工作
                  【解决方案15】:

                  查看您的主应用程序(静态目录所在的位置)是否包含在您的 INSTALLED_APPS 中。

                  使用启用的查找器搜索文件。默认是查看 STATICFILES_DIRS 中定义的所有位置以及 INSTALLED_APPS 设置指定的应用程序的“静态”目录。

                  【讨论】:

                    【解决方案16】:

                    我不得不使用

                    STATICFILES_DIRS = ( '/home/USERNAME/webapps/django/PROJECT/static/', )
                    

                    这对我有帮助。

                    【讨论】:

                      【解决方案17】:

                      DEBUG = True 在我的本地设置中为我做了。

                      【讨论】:

                      • 如果我们需要在生产环境中运行服务器怎么办?
                      • 那么你想使用DEBUG = False
                      • 不要在生产环境中使用 runserver。它不是为此而生的。它没有硬化,它是单线程的,效率低下。使用适当的应用服务器,如 gunicorn、uwsgi 或 mod_wsgi,并从适当的网络服务器提供静态资产。
                      【解决方案18】:

                      您是否已添加到您的模板中:

                      {% load staticfiles %}
                      

                      这会加载所需的内容,但由于某种原因,我经历过有时没有这个也可以工作...... ???

                      【讨论】:

                        【解决方案19】:

                        您在 STATICFILES_DIRS 和 STATIC_ROOT 中有相同的路径,我遇到了同样的问题,下面是例外 -

                        配置不当:STATICFILES_DIRS 设置不应包含 STATIC_ROOT 设置

                        对于本地,您不需要 STATICFILES_DIRS,因为无论如何您都不需要运行 collectstatic。一旦你评论它,它应该可以正常工作。

                        【讨论】:

                          【解决方案20】:

                          您的settings.py 中是否缺少这些?我正在粘贴我的项目设置之一:

                          TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth",
                          "django.core.context_processors.debug",
                          "django.core.context_processors.i18n",
                          "django.core.context_processors.media",
                          "django.core.context_processors.static",
                          "django.contrib.messages.context_processors.messages")
                          

                          另外,这就是我在urls.py 中的内容:

                          urlpatterns += patterns('', (
                                  r'^static/(?P<path>.*)$',
                                  'django.views.static.serve',
                                  {'document_root': 'static'}
                          ))
                          

                          【讨论】:

                          • 这行得通。如果不通过 URL 提供静态文件,django 服务器将无法在我的本地环境中找到并提供静态文件。添加此 url 模式允许服务器查找并提供位于项目目录中的文件。然后我添加了 {{STATIC_URL}} 和文件路径 - 位于我的应用程序目录/static/appname/css/sass 文件夹中。我实际上将它与我在生产中使用的 amazon s3 一起使用,但需要在本地环境中更改 css 并在使用 collectstatic 推送到服务器之前显示静态版本。
                          猜你喜欢
                          • 1970-01-01
                          • 2014-07-12
                          • 2018-03-19
                          • 2021-05-05
                          • 2020-08-31
                          • 1970-01-01
                          • 2019-03-24
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多