2011-05-23 61 views
-1

因此經過幾個小時的刺激之後,我終於把我的django網站啓動並運行了!我現在唯一的問題是所有樣式表/圖片鏈接不正確。或者,他們鏈接正確,但Django不會給我的文件,類型。Django:模板路徑有問題?

這是它是如何設置:

views.py:

from django.shortcuts import render_to_response 

def home(request): 
    return render_to_response('index.html') 

urls.py:

from django.conf.urls.defaults import patterns, include, url 

urlpatterns = patterns('', 
    # Examples: 
    url(r'^$', 'mysite.views.home', name='home'), 
) 

和index.html的帶來了,但沒有其他的文件顯示,如圖像,樣式表等。我如何解決這個問題?我有一種感覺,這很容易!?我嘗試了谷歌搜索,但找不到任何東西。

由於提前, QWERTY

+1

在settings.py文件中檢查STATIC_ROOT STATIC_URL。 另外這可能有助於http://docs.djangoproject.com/en/dev/howto/static-files/ – Shamanu4 2011-05-23 14:09:31

+0

嗯,你確定這真的很糟糕嗎?引用你的鏈接:「對於小型項目來說,這不是什麼大問題,因爲你可以將靜態文件保存在Web服務器可以找到的地方,但是在更大的項目中 - 尤其是那些由多個應用程序組成的項目 - 處理每個應用程序提供的多組靜態文件開始變得棘手。「他們的意思是「你的seb服務器可以找到它的地方」?感覺就像我剛剛在某個地方犯了一個愚蠢的錯誤......雖然我嘗試過,但我反正無法正常工作。 :/ – qwerty 2011-05-23 14:22:35

+0

-1。首先,你還沒有說過這個項目是如何被服務的 - 這是通過runserver,Apache還是其他的?其次,這與模板無關,它與靜態資產有關。第三,你似乎沒有對Google這個完全相同的話題提出許多許多其他問題。 – 2011-05-23 14:31:45

回答

1

這聽起來像你正在尋找的是能力serve static files

基本上,您需要在項目的某個位置添加一個文件夾以保存媒體。然後,您需要編輯您的urls.py和settings.py文件以適應對新靜態媒體目錄的訪問。

urls.py

urlpatterns = patterns('', 
    # Examples: 
    url(r'^$', 'mysite.views.home', name='home'), 

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

settings.py

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) 
# Should be the location where you put your static folder. 
# Should be different for testing and production environments. 
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'media') 

# This is assuming that your settings.py file is in path/to/project/ and your 
# static files are in path/to/project/media/ 

然後在你的模板,你可以這樣做:

< img src="/static/my_image.jpg"/> 

或任何你想要的。這將適用於JavaScript,CSS和圖像文件。

1

擴展Shamanu4的評論:你要求的是如何提供靜態文件。出於開發目的,您可以使用static file server

長期來看,這不是一個最佳解決方案。簡單的方法是隔離所有的靜態文件,並通過不同的路徑直接通過Web瀏覽器提供。在Apache中,如果先配置靜態路徑,則此靜態文件路徑可位於Django路徑中。但是,如果您需要高性能,Django團隊建議您使用輕量級,速度優化的服務器(例如lighttpd)來爲靜態文件和其他服務器提供WSGI支持(例如Apache)來爲Django提供服務。

在Django項目中,我有工作,我有Django服務從/djangoprojname/和從/djangoprojname/static/服務的靜態文件。在磁盤上,static目錄與我的Django項目目錄處於同一級別。這兩者都位於Mercurial存儲庫中。在static/之內,我有css/js/img/,並且在這些目錄中,每個應用程序都有一個目錄,名稱與應用程序相同。這樣可以避免麻煩。

django.conf(在/etc/httpd/conf.d在Fedora或RHEL)看起來像:

WSGIDaemonProcess djangoprojname threads=15 
WSGISocketPrefix /var/run/wsgi/wsgi 

Alias /djangoprojname/static/ /var/www/djangoprojname/static/ 
Alias /djangoprojname/admin/media/ /usr/lib/python2.6/site-packages/django/contrib/admin/media/ 
WSGIScriptAlias /djangoprojname /var/www/djangoprojname/django.wsgi 
WSGIProcessGroup djangoprojname 

<Directory /var/www/djangoprojname> 
    Order deny,allow 
    Allow from all 
</Directory> 

<Directory /usr/lib/python2.6/site-packages/django/contrib/admin/media> 
    Order deny,allow 
    Allow from all 
</Directory> 

的發展空間,我說這是我的項目的urls.py結束:

# Only serve static media if in development (runserver) mode. 
if settings.IS_DEV: 
    urlpatterns += patterns('', 
     url(r'^static/(?P<path>.*)$', 'django.views.static.serve', 
      {'document_root': settings.MEDIA_ROOT, 
      'show_indexes': True}), 
    ) 

settings.IS_DEV在設置如果它在開發服務器上運行,我的settings.pyTruemanage.py被修改爲設置一個環境變量,如果runserver被使用,並且settings.py檢查這個變量。 MEDIA_ROOT被設置爲static目錄的路徑。