簡體   English   中英

Django -- 無法加載 static CSS 文件

[英]Django -- Can't get static CSS files to load

我在本地計算機 (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 的新手,所以可能遺漏了一些簡單的東西——希望得到任何幫助。

仔細閱讀: https : //docs.djangoproject.com/en/dev/ref/contrib/staticfiles/

settings.pyINSTALLED_APPS中是django.contrib.staticfiles嗎?

DEBUG=False嗎? 如果是這樣,您需要使用--insecure參數調用runserver

python manage.py runserver --insecure

collectstatic與通過開發服務器提供文件無關。 它用於在一個位置STATIC_ROOT收集靜態文件,以便您的 Web 服務器找到它們。 事實上,運行collectstaticSTATIC_ROOT設置為路徑STATICFILES_DIRS是一個壞主意。 您應該仔細檢查以確保您的 CSS 文件現在甚至存在。

對於最近發布的 Django,您必須在settings.py中將靜態文件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' %}">

另一個簡單的嘗試是停止,然后重新啟動服務器,例如

$ python manage.py runserver

我查看了其他答案,但重新啟動服務器對我有用。

將以下代碼添加到settings.py

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

之后,在項目的根目錄下創建靜態文件夾。

要在模板上加載靜態文件,請使用:

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

您的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'}
))

DEBUG = True在我的本地設置中為我做了。

添加

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

並從settings.py刪除了STATIC_ROOT ,它對我STATIC_ROOT

這些步驟對我有用,請參閱在 Django 中加載靜態文件(CSS、JS 和圖像)

我使用 Django 1.10。

  1. settings.py的同一級別上創建一個static文件夾,我的settings.py的路徑是~/djcode/mysite/mysite/settings.py ,所以這個目錄是~/djcode/mysite/mysite/static/
  2. static創建兩個文件夾static_dirsstatic_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文件中的<link>標簽: <link rel="stylesheet" type="text/css" href="{% static 'css/my_style.css' %}"> ,

最后這個鏈接的路徑是http://192.168.1.100:8023/static/css/my_style.css

答對了!

你在 STATICFILES_DIRS 和 STATIC_ROOT 中有相同的路徑,我遇到了同樣的問題,下面是例外 -

ImproperlyConfigured:STATICFILES_DIRS 設置不應包含 STATIC_ROOT 設置

對於本地,您不需要 STATICFILES_DIRS,因為無論如何您都不需要運行 collectstatic。 一旦你評論它,它應該可以正常工作。

您是否在模板中添加了:

{% load staticfiles %}

這加載了需要的東西,但出於某種原因,我經歷過有時沒有這個就可以工作......???

我試過這個模型,它奏效了。

根據使用 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")), )

- 主頁.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>

我不得不使用

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

那幫助了我。

查看您的主應用程序(靜態目錄所在的位置)是否包含在您的 INSTALLED_APPS 中。

使用啟用的查找器搜索文件。 默認是在 STATICFILES_DIRS 中定義的所有位置和 INSTALLED_APPS 設置指定的應用程序的“靜態”目錄中查找。

在 settings.py 中添加這個"django.core.context_processors.static",上下文處理器

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

)

您可以根據您是在本地主機上還是在服務器上運行來設置 STATIC_ROOT。 要確定這一點,請參閱這篇文章

您可以將 STATIC_ROOT 配置重寫為:

import sys

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

如果您設置 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}),

我有同樣的問題(ununtu 16.04 服務器)。

這幫助了我

python manage.py collectstatic --noinput

在 settings.py 中添加以下內容

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

在 Django 應用程序中運行靜態文件最需要注意的兩個基本點是 - 在settings.py文件中聲明靜態文件路徑

STATIC_URL = '/static/'

另一個重要參數是您使用 static 關鍵字的網頁,您需要加載靜態文件。

{% load static %}

轉到您的 HTML 頁面加載靜態

{% load static %}

現在我犯的唯一錯誤就是這個

我的代碼:

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

更新:

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

你做對了

我有同樣的問題檢查你的 settings.py 並確保 STATIC_URL = '/static/' 在我的情況下首先/在開始時丟失,這導致所有 static 文件無法工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM