2011-04-22 63 views
3

有沒有人有關於在Django製作應用上提供靜態文件的簡單分步教程?我讀了Django docs,聽起來真的很複雜......我試圖使用lighttpd,nginx或cherokee等不同服務器來提供靜態文件的路徑,但設置這些對我來說都是希臘語。我下載了lighttpd,試圖按照說明安裝,並在幾秒鐘內出現錯誤。缺少這個或那個或者什麼......我不是一個UNIX專家,我不擅長C/C++,所以所有這些./configure和MAKE安裝對我來說都是胡言亂語......所以我想我的直接問題是:在Django製作教程上提供靜態文件

  1. 你會推薦哪個服務器提供易於安裝和易於維護的靜態文件?
  2. 假設我確實讓服務器啓動並運行,那麼是什麼?我如何告訴Django在其他服務器上查找文件?
  3. 再次,任何人都有分步教程?

非常感謝!

+0

您是否正在尋找? hhttp://docs.djangoproject.com/en/1.3/howto/static-files/它似乎是一步一步的。 – 2011-04-22 14:55:05

+0

是的,我已閱讀該文檔。我沒有發現它足夠詳細。例如,那裏有我的第二個問題的答案嗎?我可能錯過了......謝謝! – rabbid 2011-04-22 15:30:50

+0

@rabbid:在重新閱讀你的問題(這很讓人困惑)後,我認爲這是錯誤的鏈接。 – 2011-04-22 15:32:20

回答

4

對不起,沒有一步一步的教程。但這裏是一個高度概括,這可能有助於:

  1. 你可能想要去與Apache服務器(http://httpd.apache.org/)這個帶有大多數* nix分佈。
  2. 然後您想使用mod python(或作爲評論者指出mod_wsgi:http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/)來連接到Django:http://docs.djangoproject.com/en/dev/howto/deployment/modpython/?from=olddocs。一旦你完成這一步,Apache現在正朝着Django前進。
  3. 接下來,您想要將Django中的靜態文件收集到一個目錄中,並將apache指向該目錄。您可以使用該./manage.py collectstatic如果使用django.contrib.staticfiles做到這一點(http://docs.djangoproject.com/en/dev/howto/static-files/。)

所以訣竅是你沒有告訴Django將服務靜態文件委託給特定的服務器。而是告訴httpd哪些url通過Django提供,哪些url是靜態文件。

另一種說法是,所有請求都發送到Apache Web服務器。根據您在httpd.conf中指定的規則,Web服務器將決定請求是針對靜態文件還是針對由django生成的動態文件。如果它是一個靜態文件,它只會提供文件。如果請求是針對動態文件的,它將通過modpython將請求傳遞給Django。

希望有所幫助。

+1

wsgi或uwsgi絕對是現在的首選方式。 mod_python速度很慢,很快就不會受到支持。 http://docs.djangoproject.com/zh/dev/howto/deployment/modwsgi/ – Jordan 2011-04-22 15:06:21

+0

感謝您的回覆。是的,我明白你的意思了。我從官方的Django文檔中讀到了很多。看起來您正在描述如何通過Apache爲應用程序提供服務。你是否說要通過Apache提供靜態文件?我認爲醫生說這不是一條推薦路線。你認爲沒關係?我選擇的路線是通過不同的服務器(如lighttpd或cherokee)提供靜態文件。但是,我不太願意從源代碼進行製作和安裝,並且手動配置所有內容。我不知道lighttpd/cherokee如何與我的Django應用程序交談.. – rabbid 2011-04-22 15:34:12

+0

@rabbid:服務Apache的靜態媒體是很好的 - 您*不想*爲您的應用程序及其媒體提供服務Django的開發服務器。 – mipadi 2011-04-22 15:41:54

0

在發展:

  • STATICFILES_DIRS應該有所有靜態目錄內的所有靜態文件駐留

  • STATIC_URL應該是「/靜態/」如果你的文件在本地機器上,否則把基地URL放在這裏例如「http://example.com/

  • INSTALLED_APPS應該包含'django.contrib。staticfiles'

在模板中,加載staticfiles模塊:

{% load staticfiles %} 
.. 
.. 
<img src='{% static "images/test.png" %}' alt='img' /> 

在製作:

  • 添加 「STATIC_ROOT」 所使用的Django的收集所有靜態從「STATICFILES_DIRS」到它的文件

  • 收藏靜態文件

$ python manage.py collectstatic

  • 添加路徑的urls.py

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

更詳細的文章如下:

http://blog.xjtian.com/post/52685286308/serving-static-files-in-django-more-complicated

http://agiliq.com/blog/2013/03/serving-static-files-in-django/