一个简单的静态文件位置问题

时间:2012-01-12 12:09:09

标签: django

我已经离开并调整了某条线上的某些东西,并且无法找回原处。

我的文件结构

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')

我经历了血腥的岁月经历了一个消除过程,尝试了不同的组合而没有成功。什么是正确的编码方式。

2 个答案:

答案 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用于上传,现在,即在模型上有FileFieldImageField等任何时候,实际文件都将放在此处。它也应该由您的网络服务器直接提供给生产。不要在这里放置任何静态资源。

将所有静态资源放入应用的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'),
)