2012-07-23 30 views
1

我想讓外部css文件在django 1.3開發服務器上工作。我讀過django的「管理靜態文件」以及許多類似的SO問題,但我似乎仍然做錯了什麼。Django 1.3開發服務器中的外部css文件掙扎

爲什麼當我去localhost:8000/page時,我的css風格沒有正確顯示?

目錄結構

myproject 
|-- manage.py 
|-- settings.py 
|-- urls.py 
|-- app 
    |-- __init__.py 
    |-- models.py 
    |-- tests.py 
    |-- views.py 
    |-- static 
     |-- css 
      |-- page.css 
|-- templates 
    |-- app 
     |-- page.html 

的myproject/views.py

import django.http 
import django.template.loader 
import django.template 

def page_function(request): 
    t = django.template.loader.get_template("page.html") 
    c = django.template.Context() 
    return django.http.HttpResponse(t.render(c)) 

的myproject/urls.py

from django.conf.urls.defaults import patterns, include, url 
import myproject.app.views 

urlpatterns = patterns('',(r'page/$', myproject.app.views.page_function),) 

的myproject /模板/應用/ page.css

<!DOCTYPE html> 
<html> 
<head> 
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}page.css" /> 
</head> 
<body> 

<h1>My First Heading</h1> 

<p>My first paragraph.</p> 

</body> 
</html> 

的myproject/settings.py

(部分地)

MEDIA_ROOT = '' 

MEDIA_URL = '' 

STATIC_ROOT = '' 

STATIC_URL = '/static/' 

STATICFILES_DIRS = (
    "/home/myusername/Desktop/myproject/app/static", 
) 

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
# 'django.contrib.staticfiles.finders.DefaultStorageFinder', 
) 

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader', 
    'django.template.loaders.app_directories.Loader', 
#  'django.template.loaders.eggs.Loader', 
) 

ROOT_URLCONF = 'myproject.urls' 

TEMPLATE_DIRS = (
    '/home/myusername/Desktop/myproject/templates/app', 
) 

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'app' 
) 

回答

3

django docs

如果{{STATIC_URL}}不適合你r模板,您在渲染模板時可能不會使用RequestContext 。

作爲一個簡短的複習,上下文處理器將變量添加到每個模板的 上下文中。但是,上下文處理器需要您在呈現模板時使用RequestContext。如果您使用的是通用視圖,但是在 手中您需要明確使用RequestContext,則會自動發生 。要查看 的工作方式以及閱讀更多詳細信息,請查看Subclassing Context: RequestContext。

另一個選項是get_static_prefix模板標記,它是Django核心的 的一部分。取而代之的

{{ STATIC_URL }}page.css 

你需要使用:

{% load static %} 
{% get_static_prefix %}css/page.css 

還要注意的是,目錄結構保持靜態文件,所以因爲你page.css處於'static'的子目錄,您需要將它作爲'css/page.css'加載到模板中。

+0

非常感謝! – Bentley4 2012-07-23 19:01:11