我正在寻找一种在django中使用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 :(得分:1)
在我看来,你应该尝试使用静态模板标签。 在你的HTML顶部添加:
{% load staticfiles %}
然后你的css链接应该是这样的:
<link rel="stylesheet" type="text/css" href="{% static "css/estil.css" %}" />
答案 1 :(得分:1)
我认为负载静态文件也是如此。
问题是你把它放在.py文件中?它应该在模板中。 (或者这似乎是打字错误)
啊,我明白了,你错过了模板的路径:
return render_to_response('inici.html'
应该是:
return render_to_response('/principal/inici.html'
在主目录中创建路径模板
再次使用名为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" />
顺便提一下你的模板dir取决于你应用程序路径中的....如果它属于你的应用程序(校长我猜),在你的网站目录中,如果它用于整个网站(projecte)
在您的观看.py中有两种方法可以做到, 经典的方式:(例如)
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'
编辑(2012年12月31日)
并且不要忘记添加您的项目网址:
if settings.DEBUG:
urlpatterns += patterns('',
(r'', include('staticfiles.urls')),
)