2013-03-20 69 views
1

我剛開始使用Django,在AptanaStudio3中使用PyDev。我使用有用的Django教程來構建我簡單項目的主幹。現在我正在嘗試使用css進行一些基本的格式設置和着色,但花費了相當長時間的努力。使用Django訪問.css文件時遇到困難

html頁面仍然顯示正常。它只是沒有抓住CSS(404)。我知道這從控制檯:

[20/Mar/2013 12:41:51] "GET /signup/ HTTP/1.1" 200 306 
[20/Mar/2013 12:41:51] "GET /signup/static/signup.css HTTP/1.1" 404 2750 

我的文件結構:

Learning 
- Learning 
--- templates 
----- 404.html 
----- 500.html 
--- _init.py 
--- settings.py 
--- urls.py 
--- wsgi.py 
- signup 
--- static 
----- signup.css 
--- templates 
----- signup 
------- detail.html 
------- index.html 
------- results.html 
----- __init__.py 
----- admin.py 
----- models.py 
----- tests.py 
----- urls.py 
----- view.py 
--- manage.py 
--- sqlite.db 
--- python 

在設置:

STATIC_ROOT = '' 
STATIC_URL = 'static/' 
STATICFILES_DIRS = ('') 
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
) 

在我的HTML模板:

<html> 
    <head> 
     <title>User List</title> 
     <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}signup.css" /> 
... 

在意見。 py:

def ip_address_processor(request): 
    return {'ip_address': request.META['REMOTE_ADDR']} 
def index(request): 
    user_list = User.objects.order_by('name')[:5] 
    template = loader.get_template('signup/index.html') 
    context = RequestContext(
          request, 
          {'user_list': user_list,}, 
          [ip_address_processor]) 
    return HttpResponse(template.render(context)) 

任何見解?

+1

**你有沒有運行'./manage.py collectstatic'?** Django的需要都在一個目錄中收集使用測試服務器來爲他們服務的靜態文件。此外,請務必將您的'STATIC_ROOT'設置設置爲絕對可寫的路徑,以便可以有效地收集這些文件。有關更多信息,請參閱[靜態文件的Django文檔](https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/)。另外,請記住,在生產環境中,靜態文件應該由HTTP服務器直接提供。 – pistache 2013-03-20 08:36:35

+1

另外,你的CSS文件在'/ signup/static/signup.css'路徑中被檢索到,而你的'STATIC_URL'是'/ static /'。 **您需要將該路徑設置爲絕對路徑,而不是相對於您的頁面。**請更改爲'href =「/ {{STATIC_URL}} signup.css」',或者使用'{%static'signup.css' %}'由'staticfiles'庫提供的模板標籤(** better **!)。 – pistache 2013-03-20 08:43:04

+0

@pistache(post1),不,我沒有運行過。我只是做了你的建議,沒有解決它。我會在一秒鐘內更新文件結構。 – bhekman 2013-03-20 08:44:10

回答

1
  • STATIC_URL是相對路徑(static/),這意味着所有的靜態文件將相對於當前頁面進行搜索。 Django的測試服務器不會期待這種行爲,所以靜態URL將不會匹配,從而觸發404錯誤。你需要讓這條道路是絕對的,而不是相對於你的頁面(/static/,例如)

  • 當使用Django的staticfiles系統與TESTSERVER,您需要使用./manage.py collectstatic

  • 我也收集您的靜態文件強烈推薦使用{% static 'signup.css' %}語法而不是{{ STATIC_URL }}signup.css請注意,如果您使用此備用格式,則需要在文件的較早位置包含{% load static %}

+1

爲什麼你如此強烈地推薦替代格式? – bhekman 2013-03-20 09:41:14

+0

這對我來說有些誇張。 Django文檔建議使用staticfiles模塊,並且我認爲這是標準的做法,您應該這樣做。當然這是一樣的結果,但我喜歡約定和清晰度。 – pistache 2013-03-20 12:07:40

+0

順便說一句,你的編輯是一個非常好的主意(特別是因爲缺少'{%load staticfiles%}'所導致的錯誤**根本不顯示**)。在我接受它之前,它被其他用戶拒絕了,這表明*有多少SO用戶正在審閱編輯而無需查看*。我會自己添加它,謝謝。 – pistache 2013-03-20 12:12:01