我在从静态目录加载CSS时遇到问题:
settings.py
MEDIA_ROOT = '/he/sites/video1.hackedexistence.com/htdocs/media/'
MEDIA_URL = '/media/'
STATIC_ROOT = '/he/sites/video1.hackedexistence.com/htdocs/static/'
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/static/admin/'
STATICFILES_DIRS = ()
url.py
from django.conf.urls.defaults import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
r'^beers/$', 'beer.views.BeersAll'),
)
base.html加载正常,css无法加载
<link rel="stylesheet" type="text/css" href="/static/css/video1.css" />
css href链接指向
Page not found (404)
'css/video1.css' could not be found
css文件的完整路径:
/he/sites/video1.hackedexistence.com/htdocs/static/css/video1.css
我正在关注Hacked Existence的youtube django教程。他似乎没有遇到这种设置问题。我怎么能纠正这个?
答案 0 :(得分:1)
我相信你需要提供静态文件。 Django文档中描述了有关如何执行此操作的说明。 https://docs.djangoproject.com/en/dev/howto/static-files/ 请注意,有不同的开发和部署说明。
答案 1 :(得分:1)
黑客存在可能有他的网络服务器(基于你上一个问题的apache)配置为服务他的静态文件。
user1658078是正确的,因为您需要以某种方式serve the static files,并且在开发环境中,您可以使用django的内置视图django.contrib.staticfiles.views.serve(request, path)
- 所有这些视图都是查看路径集在STATICFILES_DIRS
和每个应用程序内的static
子目录中(例如,如果您的项目是我的名为mysite
并且它有一个名为blog
的应用程序,那么它将查找{{1} }}),并提供与值mysite/blog/static/
之后的URL部分匹配的任何文件。
最后,值得指出的是,您的设置目前根本不起作用,因为您的MEDIA_ROOT和STATIC_ROOT目录设置为从settings.STATIC_URL
的子目录提供,除非您已创建此目录,它根本不起作用。
修复静态文件,模板,管理文件和上传的文件,请按照以下说明操作:
在/he/sites/video1.hackedexistence.com/htdocs/
中,使用以下内容替换问题中的行:
settings.py
另请确保import os
PROJECT_DIR = os.path.dirname(__file__)
INSTALLED_APPS = (
'django.contrib.staticfiles',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.admin',
# 'django.contrib.admindocs',
'beer', # note - I'm guessing the name of your application is beer
)
# django.contrib.staticfiles app collects files here when we run the collectstatic command
# (depending on your web server config, you may want to change this to e.g. '/var/www/static/' when it comes to deployment)
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static-serve').replace('\\', '/')
# this should be prepended to your urls for static resources
STATIC_URL = '/static/'
# you can put static files which apply to your entire project here
STATICFILES_DIRS = (
os.path.join(PROJECT_DIR, "static").replace('\\', '/'),
)
# the URL to where we have the admin media (static files) from a web browser's perspective (not needed if using Django 1.4 or greater)
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
# should be different from static files dir - this is where uploaded stuff goes
# (depending on your web server config, you may want to change this to e.g. '/var/www/media/' when it comes to deployment)
MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media').replace('\\', '/')
# if you need to serve the uploaded stuff again, you need to prefix your urls with this
MEDIA_URL = '/media/'
# you can put templates which apply to your entire project here
TEMPLATE_DIRS = (
os.path.join(PROJECT_DIR, "templates").replace('\\', '/'),
)
设置为DEBUG
。
在您的django项目中的urls.py中(即{em> not 在True
的应用目录中),最后添加以下内容:
beer
在django项目目录中创建以下目录:
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
# serving of uploaded media + static files while debug mode is on
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # uploaded media
urlpatterns += staticfiles_urlpatterns() # files in each app's static/ dir
- 这是files uploaded by users去的地方(例如通过FileField或ImageField)/media/
- 您可以在此处放置适用于整个django项目的静态文件(例如整个页面的样式)。例如,使用此配置,如果您尝试访问网址/static/
上的css文件video1.css
,那么请确保该文件位于以下路径:static/css/video1.css
/static/css/video1.css
- 这是您放置适用于整个django项目的模板的地方/templates/
- 这是您放置仅适用于一个特定网站的静态文件的位置。当在这里构建url到文件时,你就像对待它们在/beer/static/
目录中一样,所以只需将/static/
的值加到相对文件名之前。STATIC_URL
- 当您需要开始为视图创建模板时,您可以将模板放在此处(TEMPLATE_LOADERS
设置默认包含/beer/templates/
,这将在此目录中找到模板)。与特定于应用程序的静态目录类似,只需将此目录中的文件视为正常django.template.loaders.app_directories.Loader
目录中的文件。/templates/
- 在开发过程中不使用它(所以现在不要太担心),但是当你最终要部署django应用程序时,运行./manage.py collectstatic,这将导致django从每个应用程序目录的/static-serve/
目录复制所有文件并将它们放在这里,然后配置您的Web服务器,当URL以值static
({{{}}开头时,从该目录提供文件在这种情况下{1}}。现在您的静态文件将正确加载,管理员将正常显示,您的用户上传文件将能够正常提供,并且您的模板将在您需要时正确找到。