2013-03-07 180 views
1

我查看了無數的答案和試圖找到一個明確的指南或方法來做到這一點的問題,但似乎每個人都有不同的方式。有人可以請向我解釋如何在模板中提供靜態文件?Django靜態設置

假設我剛剛用Django 1.4創建了一個全新的項目,我需要做什麼才能呈現圖像?我應該在哪裏放置媒體和靜態文件夾?

+0

沒有用,但我覺得你的痛苦。我覺得它應該很簡單,但是我不瞭解的基本理解之間肯定存在根本的差距。我不清楚媒體和靜態之間的區別是什麼,除了用戶上傳之外的其他內容。 – user798719 2013-03-16 18:28:03

+0

@ user798719其實我想清楚了,一旦你第一次把它弄明白就很簡單。 STATIC_ROOT是所有的靜態文件獲取收集在目錄中。 STATIC_URL是url靜態文件將可在(例如) MEDIA_ROOT是路徑目錄下的所有用戶上傳文件會 – 2013-03-17 02:16:00

+0

@ user798719 STATIC_ROOT是您收集的所有靜態文件的目錄。 STATIC_URL是靜態文件將可用的URL(例如) MEDIA_ROOT是所有用戶上載文件將轉到的目錄的路徑 MEDIA_URL與STATIC_URL,只是對uri的引用,這些文件將在 上可用STATICFILES_DIRS是一個元組,路徑爲所有文件的存儲位置d之前收集部署然而,你不能STATICFILES_DIR STATIC_ROOT或它會拋出一個錯誤! – 2013-03-17 02:21:50

回答

2
  1. 把你靜態文件爲<app>/static或添加到STATICFILES_DIRS
  2. 絕對路徑配置Web服務器(你不應該成爲靜態文件Django的)文件服務解決方案在STATIC_ROOT
  3. STATIC_URL基礎網址的web服務器提供
  4. 運行./manage.py collectstatic
  5. 請務必使用RequestContext在渲染調用和{{ STATIC_URL }}到前綴路徑
  6. 咖啡和拍拍自己的背

多一點點關於運行在Django的前一個Web服務器。 Django實際上是一個應用程序服務器。它的設計目的並不在於提供靜態文件。這就是爲什麼當DEBUG=False積極拒絕這樣做。另外,Django開發服務器不應該用於生產。這意味着在任何時候都應該在Django前面有一些東西。它可能是一個WSGI服務器,例如gunicorn或一個'真實'的網絡服務器,如nginx或Apache。

如果您運行的是反向代理(例如nginx或Apache),則可以將/static綁定到文件系統中的路徑以及其他流量傳遞給Django。這意味着您的STATIC_URL可以是相對路徑。否則,您將需要使用絕對URL。

0

創建的項目應該有一個靜態文件夾。將所有資源(圖像,...)放在那裏。 然後,在你的HTML模板,你可以參考STATIC_ROOT並添加資源路徑(相對於靜態的文件夾)

0

下面是官方文檔:

如何管理靜態文件:https://docs.djangoproject.com/en/1.4/howto/static-files/

靜在一般的文件:https://docs.djangoproject.com/en/1.4/ref/contrib/staticfiles/

如果您打算在生產型環境中部署,那麼你應該在這裏閱讀部分:https://docs.djangoproject.com/en/1.4/howto/static-files/#staticfiles-production

一般來說,你把我們的靜態和媒體文件夾中的Django項目應用程序之外

+0

出於好奇,爲什麼把靜態文件放在應用程序之外? – 2013-03-08 00:35:00

+0

呈現HTML和與數據庫交談是一個完全獨立的服務文件集問題。 Django本身並不試圖成爲一個完美的Web服務器,恰恰相反:它是一個WSGI應用程序,需要一種或另一種類型的前端。 './manage.py runserver'僅用於開發。 – ferrix 2013-03-08 14:59:45

0
  • 在設置中定義STATICFILES_DIRS,STATIC和MEDIA路徑。
  • 在模板文件夾,urls.py,settings.py等等旁邊創建靜態文件文件夾...
  • 您不必創建媒體文件夾,因爲它會在您上傳圖像時自動創建。
  • 在URLconf把這個一個:

    from django.conf.urls import patterns, include, url 
    from django.contrib import admin 
    from django.conf import settings 
    from django.contrib.staticfiles.urls import staticfiles_urlpatterns 
    from django.conf.urls.static import static 
    
    admin.autodiscover() 
    
    urlpatterns = patterns('', 
        ............. 
    ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 
    
    urlpatterns += staticfiles_urlpatterns() 
    
  • 模板:

    {% load static %} 
    <img src="{% static 'images.png' %}"> 
    <img src="{{MEDIA_URL}}images.png"> 
    
+0

這將工作,但Django將提供文檔不鼓勵的文件。 – ferrix 2013-03-08 14:54:08

+0

Django 1.4正在使用{%load static%}。 Django 1.5正在使用來自staticfiles%的{%load static}。如果您想使用舊的{{STATIC_URL}},則可以選擇 – catherine 2013-03-08 15:02:54

+0

這使得媒體文件夾中的圖像可以正常工作,但仍然沒有運行靜態文件夾。 – 2013-03-08 15:59:35