Django項目關閉debug模式後,靜態文件沒法加載的解決辦法

近期在作OpenStack Horizon項目的相關開發,OpenStack的總體環境使用DevStack安裝,horizon開發過程當中直接使用命令:
python manager.py runserver

開啓內置服務器,因爲項目中local_settings.py文件中的DEBUG=True,進行開發和調試一直沒什麼問題。 css

可是如今須要編寫404,500等出錯頁面,在debug模式下出了錯都會出現報錯頁面,沒法轉向到404或500頁面,這時我將local_settings.py中的DEBUG設爲false,這時候應該能夠轉向到404頁面。實驗證實確實如此,404和500頁面均可以獲得,可是出現了新的問題:css和js文件沒法加載。 python

在網上找了找,很快就找到了問題的緣由:Django框架僅在開發模式下提供靜態文件服務。當我開啓DEBUG模式時,Django內置的服務器是提供靜態文件的服務的,因此css等文件訪問都沒有問題,可是關閉DEBUG模式後,Django便不提供靜態文件服務了。想想這是符合Django的哲學的:這部分事情標準服務器都很擅長,就讓服務器去作吧! shell

OK,解決問題的辦法也就出現了,我最開始想到的就是,使用項目正式部署是所使用的配置,由apache提供靜態文件服務。不過解決問題的方法遠不止一種,在stackoverflow上我發現了更有趣的方法。如今把本身總結的四種方法列在下面,共你們參考: apache

1.將靜態文件由apache提供文件服務(相似正式部署): django

    編輯/etc/apache2/sites-available/horizon文件: 服務器

#Alias /media /opt/stack/horizon/openstack_dashboard/static
Alias /static /opt/stack/horizon/openstack_dashboard/static
    創建靜態文件連接: 
ln -sv /opt/stack/horizon/openstack_dashboard/static /opt/stack/horizon
    重啓apache:
sudo service apache2 restart
2.使用django.views.static.serve()方法。在URLconf中添加:
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': '/path/to/media'}),
官方文檔中評價這種辦法:「The big, fat disclaimer」。

3.僞造404頁面:使用正確的URL連接404頁面模板; 框架

4.改變項目運行方式: debug

python manage.py runserver --insecure
最後這種是stackoverflow上最受歡迎的方法,確實簡單快捷!


參考連接:http://stackoverflow.com/questions/5836674/why-does-debug-false-setting-make-my-django-static-files-access-fail 調試

https://docs.djangoproject.com/en/1.2/howto/static-files/#limiting-use-to-debug-true rest

相關文章
相關標籤/搜索