2012-12-17 60 views
0

我正在尋找一種在django中使用css文件的方法。我嘗試了很多東西,並在很多論壇上搜索過,但是我找不到我的錯誤。這是我的代碼:在django 1.4開發中使用css

目錄結構:

/projecte 
    manage.py 
    /projecte 
     settings.py 
     url.py 
     wsgi.py 
     /static 
      /css 
        estil.css 
     /templates 
      inici.html 

    /principal 
     models.py 
     views.py 
     forms.py 

URL.py

from django.conf.urls.static import static 
from django.contrib.staticfiles.urls import staticfiles_urlpatterns 
urlpatterns = patterns('', 
    url(r'^$','principal.views.inici'), 
    ... 
) 
urlpatterns += staticfiles_urlpatterns() 

SETTINGS.py

RUTA_PROJECTE = os.path.dirname(os.path.realpath(__file__)) 
STATIC_ROOT = os.path.join(RUTA_PROJECTE,'static') 
STATIC_URL = '/static/' 

STATICFILES_DIRS = ( 
os.path.join(RUTA_PROJECTE,'static'), 
) 

TEMPLATE_CONTEXT_PROCESSORS = ( 
    ... 
'django.core.context_processors.static',  
) 

INSTALLED_APPS = ( 
    'django.contrib.staticfiles', 
    ... 
'principal', 
) 

VIEWS.py

def inici(request): 
tracks = Track.objects.all() 
#print(len(tracks)) 

return render_to_response('inici.html', 
    {'tracks':tracks}, 
    context_instance = RequestContext(request)) 

INICI.html

<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/estil.css"> 
當我輸入樣式不起作用

。我沒有錯誤,但沒有任何事情發生。 感謝您的幫助

+0

你有HTML裏面INICI.py? INCI.py從哪裏來?你如何運行開發服務器?你的模板在結構中位於哪裏? –

+0

我把它編輯成.html,可能是輸入錯誤。但是你把你的模板放在哪裏? (和.html文件) –

+0

如果他沒有找到CSS瀏覽器不會給出錯誤(至少如果你不看錯誤消息)。您還可以查看頁面的來源並查看他所做的路徑,看看是否正確。如果不正確:請調整設置,查看我的答案,瞭解放置位置的示例...(但有很多可用的...) –

回答

1

在我看來,你應該嘗試使用靜態模板標籤。 在HTML頂部補充一點:

{% load staticfiles %} 

,然後你的鏈接到的CSS應該是這樣的:

<link rel="stylesheet" type="text/css" href="{% static "css/estil.css" %}" /> 
+0

我已經修復它!我不知道我必須在終端中運行它:python manage.py collectstatic。 謝謝大家的幫助! – user1781245

1

我覺得負荷staticfiles不相同。

問題是你把它放在一個.py文件中?它應該在模板中。 (或者,這似乎是一個打字錯誤)

我明白了,你錯過了路徑模板:

return render_to_response('inici.html' 

應該是:

return render_to_response('/principal/inici.html' 

使主要路徑模板dir

和模板中的子路徑再次調用principal:

principal/templates/principal 

,並把你的模板格式(.html)有

/projecte 
    manage.py 
    /projecte 
     settings.py 
     url.py 
     wsgi.py 
     /templates (dir for your project templates) 
       /projecte 
       /admin (e.g. if you want to override your admin templates, do it here) 
    /var (a dir used operationaly for all variable things... logs, files, db) 
     /static 
      /css 
       estil.css 
     /media 
     /logs 
     /sqlite (for testing only, unless you use sqlite operational as well) 
    /principal 
     models.py 
     views.py 
     forms.py 
     /templates (a dir for your application templates) 
        /principal 
          inici.html 
     /media 

,並確保他發現模板...一第二種:

settings.py中

使用:

import os 

SETTINGS_DIR = os.path.dirname(os.path.realpath(__file__)) 
BUILDOUT_DIR = os.path.abspath(os.path.join(SETTINGS_DIR, '..')) 
STATIC_ROOT = os.path.join(BUILDOUT_DIR, 'var', 'static') 
STATIC_URL = '/static_media/' 
MEDIA_ROOT = os.path.join(BUILDOUT_DIR, 'var', 'media') 
MEDIA_URL = '/media/' 

TEMPLATE_DIRS = (
    os.path.join(SETTINGS_DIR, "templates"), 
) 
TEMPLATE_CONTEXT_PROCESSORS = (
..... 
    # Extra for django-staticfiles. 
    'staticfiles.context_processors.static_url' 
...... 
) 

INSTALLED_APPS (
..... 
    'django.contrib.staticfiles', 
    'yourProjectName', 
    'yourAppName',  
    'staticfiles', 
..... 

我會把這樣的東西放在你的remplate(.html)文件中:

<link rel="stylesheet" 
     href="{{ STATIC_URL }}iamapps/iamapps.css" 
     type="text/css" 
     media="screen, projection" /> 

通過,你把你的模板目錄的方式取決於....在你的應用程序路徑,如果它屬於你的應用程序(主要我猜的),在您的網站目錄。如果它使用整個網站(projecte)

並在你的意見。PY有2種方式來做到這一點, 經典的方式:(EG)

def home(request, template='principal/home.html'): 

    logger.debug("Home view called by user %s" % request.user) 
    return render_to_response(template,{},context_instance=RequestContext(request)) 

或基於類的觀點:

class HomeView(TemplateView): 
    template_name = "principal/home.html" 

如果你想做到這一點真的很好,做一個基礎模板您的應用程序模板目錄和擴展這一項,使用您的inici.html:

{% extends 'prinicpal/base.html' %} 

那麼這裏寫一個完整的教程之前......這一切都取決於你定義哪些地方你把它。你的問題不包含所有的信息,以確切地指出你的代碼中的錯誤。

編輯 有了您的加入信息,我重建項目,和它的作品對我來說這個設置:同一個項目的結構 正如你在你的問題了。

import os 

RUTA_PROJECTE = os.path.dirname(os.path.realpath(__file__)) 
STATIC_ROOT = os.path.join(RUTA_PROJECTE,'static') 
STATIC_URL = '/static/' 
BUILDOUT_DIR = os.path.abspath(os.path.join(RUTA_PROJECTE, '..')) 
DEBUG = False 


TEMPLATE_DIRS = (
    os.path.join(RUTA_PROJECTE, "templates"), 
) 


TEMPLATE_CONTEXT_PROCESSORS = ( 
    'django.core.context_processors.debug', 
    'django.core.context_processors.i18n', 
    'django.core.context_processors.media', 
    # Extra for django-staticfiles. 
    'staticfiles.context_processors.static_url', 

) 


INSTALLED_APPS = ( 
    'django.contrib.staticfiles', 
    'principal', 
    'projecte',  
    'staticfiles', 
) 

ROOT_URLCONF = 'projecte.urls' 

編輯(31-12-2012)

,不要忘了在你的項目中添加URL:

if settings.DEBUG: 
    urlpatterns += patterns('', 
     (r'', include('staticfiles.urls')), 
    ) 
+0

感謝您的幫助michel,但Django不能找到模塊'django_extensions'和de上下文處理器'staticfiles.context_processors.static_url' – user1781245

+0

我把我所有的代碼像你說的,我不知道我還需要做什麼!我似乎是一件非常簡單的事情,但它不起作用。文件的所有路徑看起來不錯... – user1781245

+0

對不起,忘了django_extensions ...我的意思是這個包:django-staticfiles可以在這裏找到:http://pypi.python.org/pypi/django-staticfiles/ –