我已经离开并调整了某条线上的某些东西,并且无法找回原处。
我的文件结构
examplesite1
--registration
--A bunch of files well ignore
--snapboard
--static
--Associated static folders css, js etc
--templates
--snapboard
--html files
--some folders
--manage.py
--settings.py
--urls.py
--__init__.py
我无法将模板/ snapboard中的html文件指向snapboard / media中的静态文件.html中的代码是
<link type="text/css" rel="stylesheet" href="{{ SNAP_MEDIA_PREFIX }}/css/yui/reset-fonts-grids.css" />
在我认为有效的设置文件中
MEDIA_ROOT = ''
MEDIA_URL = '/snapboard/'
ADMIN_MEDIA_PREFIX = '/media/admin/'
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.load_template_source',
'django.template.loaders.app_directories.load_template_source',
#'django.template.loaders.eggs.load_template_source',
)
STATICFILES_DIRS = (
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'django.contrib.staticfiles',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
STATIC_URL = 'static/'
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.request",
"snapboard.views.snapboard_default_context",
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.doc.XViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',
'pagination.middleware.PaginationMiddleware',
'snapboard.middleware.threadlocals.ThreadLocals',
'snapboard.middleware.ban.IPBanMiddleware',
'snapboard.middleware.ban.UserBanMiddleware',
)
ROOT_URLCONF = 'examplesite1.urls'
TEMPLATE_DIRS = (
)
INSTALLED_APPS = (
'examplesite1',
'registration',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.markup',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.staticfiles',
'snapboard',
'pagination',
)
SNAP_MEDIA_PREFIX = MEDIA_URL + 'static/'
# Set MEDIA_ROOT so the project works out of the box
import os
MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'snapboard/media')
我经历了血腥的岁月经历了一个消除过程,尝试了不同的组合而没有成功。什么是正确的编码方式。
答案 0 :(得分:0)
将您的媒体网址设为MEDIA_URL = '/snapboard/'
,并在您的代码中将href="{{ SNAP_MEDIA_PREFIX }}/css/yui/reset-fonts-grids.css"
更改为href="{{ SNAP_MEDIA_PREFIX }}css/yui/reset-fonts-grids.css"
,因为{{ SNAP_MEDIA_PREFIX }}/css/
与{{ SNAP_MEDIA_PREFIX }}css/
答案 1 :(得分:0)
你在运行什么版本的Django?如果它是1.3+,你应该使用staticfiles contrib包,你应用程序的“media”目录应命名为static
,以允许Django选择它。
否则,您的应用内部不支持静态资源,因此您需要将所有这些文件复制到MEDIA_ROOT
目录中。
<强>已更新强>
放弃整个SNAP_MEDIA_PREFIX
业务;这是不必要的,也是复杂的事情。这就是你所需要的:
STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'static')
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'site_media')
MEDIA_URL = '/site_media/'
从不直接使用STATIC_ROOT
。这是collectstatic
管理命令将转储文件的目录,应由生产Web服务器直接提供。 Django 从不从这里提供任何东西。
MEDIA_ROOT
用于上传,现在,即在模型上有FileField
,ImageField
等任何时候,实际文件都将放在此处。它也应该由您的网络服务器直接提供给生产。不要在这里放置任何静态资源。
将所有静态资源放入应用的static
目录中。每个应用程序的static
目录将由Django在STATIC_URL
下的开发中提供。因此,<project_root>/some_app/static/style.css
将在/static/style.css
通过您的浏览器提供。因此,将静态目录命名为通常是一个好主意,即使用<project_root>/some_app/static/some_app/style.css
代替,以便URL变为/static/some_app/style.css
。这样你的静态文件就不会互相覆盖。
如果您需要项目范围的静态资源,请在项目中创建一个完全不同的目录(我倾向于使用assets
),然后将其添加到STATICFILES_DIRS
,如下所示:
STATICFILES_DIRS = (
os.path.join(os.path.dirname(__file__), 'assets'),
)