簡體   English   中英

無法提供靜態文件,Django 1.6

[英]Cannot serve static files, Django 1.6

我無法使Django 1.6提供靜態文件。

在我的settings.py中,我有:

DEBUG = True

#...

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

STATIC_URL = '/static/'
STATIC_ROOT = '/home/it/static/'
STATIC_DIRS = (
    os.path.join(BASE_DIR, '../static'),
)
STATIC_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

我還向我的urls.py中添加了以下內容:

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

該HTML文件具有以下內容:

{% load staticfiles %}
#...
<link rel='stylesheet' type='text/css' href='{% static "css/base.css" %}' />

項目樹的相關部分如下所示:

/media/extra/django/
├── it
│   ├── it
│   │   ├── __init__.py
│   │   ├── settings.py
│   │   ├── urls.py
│   │   ├── wsgi.py
│   ├── jobs
│   │   ├── admin.py
│   │   ├── __init__.py
│   │   ├── models.py
│   │   ├── static
│   │   │   └── jobs
│   │   ├── tests.py
│   │   ├── urls.py
│   │   ├── views.py
│   ├── manage.py
├── static
│   ├── css
│   │   ├── base.css
│   │   └── colours.css
│   ├── images
│   │   └── favicon.ico
│   └── scripts
│       └── base.js
└── templates
    ├── it
    │   ├── base.html
    │   └── index.html
    ├── jobs
    │   └── index.html
    ├── site_base.html

我嘗試過將靜態目錄作為“ it”目錄的同級(並更改STATIC_DIRS變量)。 我試過在urlpatterns上使用+ = staticfiles_urlpatterns()。 我嘗試將完整路徑添加到STATIC_DIRS。

我也看過這些相關的線程: django 1.6中的靜態文件未找到 無法讓Django提供靜態文件 Django 1.6.2將不會提供靜態內容

非常感謝

我不確定您的設置有什么問題,但這是對我有用的設置:

settings.py

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

我尚未定義STATIC_ROOT或STATIC_FINDERS,因此它使用的是默認設置。 對於靜態文件,我在urls.py中沒有什么特別的要求,對於媒體來說只有一行:

urls.py

urlpatterns = patterns('',
    #...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

靜態標記在模板上工作正常,因此我認為您並不是絕對需要urls.py的行。

您不應該通過Web框架來提供靜態內容,這是Web服務器的工作(例如Apache或Nginx)

例如,如果您settings.py文件中的STATIC_URL = '/static/' ,則可以在模板中放置"{{ STATIC_URL }}css/base.css" ,然后讓網絡服務器以/static/方式提供/static/服務,從而繞過Django完全。

在您的urls.py中,嘗試通過更改urlpatterns來告訴Django標准視圖為您的靜態文件提供服務

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

 With the following:

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


 In the settings.py add:

 import os.path
 STATIC_ROOT ='only_the_path_to_the_project'
 STATICFILES_DIRS = (
  os.path.join(os.path.dirname(__file__),'staticcc').replace('\\','/'),
  )

開發中
在您的應用文件夾中,創建文件夾名稱“ static”,然后將圖片保存在該文件夾中。
要使用圖片,請使用:

<html>
    <head>
       {% load staticfiles %} <!-- Prepare django to load static files -->
    </head>
    <body>
        <img src={% static "image.jpg" %}>
    </body>
</html>

在生產中:
就像開發中一樣,只需為Django添加更多參數:
1.添加settings.py
STATIC_ROOT = os.path.join(BASE_DIR, "static/") (這將准備用於存儲所有應用程序的靜態文件的文件夾)
2.確保您的應用程序位於INSTALLED_APPS = ['myapp',]
3.在terminall中運行命令python manage.py collectstatic (這會將INSTALLED_APPS中包含的所有應用程序的靜態文件復制到全局靜態文件夾-STATIC_ROOT文件夾中)

這就是Django需要的全部內容,之后,您需要進行一些Web服務器端設置以允許使用靜態文件夾。 例如,在配置文件httpd.conf (對於Windows)中的apache2或sites-enabled / 000-default.conf中。 (在Linux的站點虛擬主機部分下)添加:

 Alias \static "path_to_your_project\static"

<Directory "path_to_your_project\static">
    Require all granted
</Directory>



就這樣

暫無
暫無

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

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