Django 404错误从静态目录加载CSS

时间:2012-10-11 22:27:30

标签: css django static

我在从静态目录加载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教程。他似乎没有遇到这种设置问题。我怎么能纠正这个?

2 个答案:

答案 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项目目录中创建以下目录:

  1. 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去的地方(例如通过FileFieldImageField
  2. /media/ - 您可以在此处放置适用于整个django项目的静态文件(例如整个页面的样式)。例如,使用此配置,如果您尝试访问网址/static/上的css文件video1.css,那么请确保该文件位于以下路径:static/css/video1.css
  3. /static/css/video1.css - 这是您放置适用于整个django项目的模板的地方
  4. /templates/ - 这是您放置仅适用于一个特定网站的静态文件的位置。当在这里构建url到文件时,你就像对待它们在/beer/static/目录中一样,所以只需将/static/的值加到相对文件名之前。
  5. STATIC_URL - 当您需要开始为视图创建模板时,您可以将模板放在此处(TEMPLATE_LOADERS设置默认包含/beer/templates/,这将在此目录中找到模板)。与特定于应用程序的静态目录类似,只需将此目录中的文件视为正常django.template.loaders.app_directories.Loader目录中的文件。
  6. /templates/ - 在开发过程中不使用它(所以现在不要太担心),但是当你最终要部署django应用程序时,运行./manage.py collectstatic,这将导致django从每个应用程序目录的/static-serve/目录复制所有文件并将它们放在这里,然后配置您的Web服务器,当URL以值static({{{}}开头时,从该目录提供文件在这种情况下{1}}。
  7. 现在您的静态文件将正确加载,管理员将正常显示,您的用户上传文件将能够正常提供,并且您的模板将在您需要时正确找到。