[英]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.