新Django应用程序媒体\u URL路径

2024-06-16 13:12:35 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我通过python manage.py startapp foo在Django创建了一个新的应用程序

我的新应用程序不会通过{{ MEDIA_URL }}加载/site_media/目录中的任何文件。他们正在尝试从应用程序的目录而不是/site_media/目录进行路径选择。你知道吗


示例: 而不是从http://sitename/site_media/bootstrap/bootstrap.min.css加载

它试图从http://sitename/foo/bootstrap/bootstrap.min.css加载


这里是来自settings.py的一个片段,它定义了MEDIA_URL

MEDIA_URL = '/site_media/'

我可以通过在base.html和我的show_foo.html中用/site_media/替换{{ MEDIA_URL }}来强制文件在应用程序中正确加载,但这会破坏站点其余部分的路径。你知道吗

我不知道其他人还想看什么来诊断这个问题,但我被难住了!你知道吗


以防万一: 从我的应用程序目录中的urls.py
#!/usr/bin/python
# -*- coding: UTF8 -*-
from django.conf.urls.defaults import *

urlpatterns = patterns('foo_web.foo_track.views',   
url('^$','view_foo_track',name='foo_home'),  
url('^newentry/(?P<entry_id>\d+)$','write_form_data',name='foo_track_new'),
)


settings.py编辑*删除注释以提高可读性
import os
current_dir = os.path.abspath(os.path.dirname(__file__))
from os import sys, path
sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))
import run_server

cherry_config,django_config = run_server.get_web_server_parameters()
DEBUG = django_config['DEBUG']
TEMPLATE_DEBUG = django_config['TEMPLATE_DEBUG']
CACHE_MODE = django_config['CACHE_MODE']
DB = django_config['DB']
HOST = django_config['HOST']


LOGIN_URL = '/'
LOGOUT_URL = '/'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', 
        'NAME': '%s' % DB,             
        'USER': 'postgres', 
        'PASSWORD': '*****',
        'HOST': '%s' % HOST,
        'PORT': '5432',              
    }
}

CACHES = {
    'default': {
        'BACKEND': CACHE_MODE,
        'LOCATION': 'my_cache_table',
        'TIMEOUT': 1800,
        'OPTIONS': {
            'MAX_ENTRIES': 10000
        }
    }
}

ADMINS = (
    ('**', '**'),
)

MANAGERS = ADMINS

#~ EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
DEFAULT_FROM_EMAIL = '**' 
SERVER_EMAIL = '**' 
EMAIL_USE_TLS = True
EMAIL_HOST = "**"
EMAIL_HOST_USER = "**"
EMAIL_HOST_PASSWORD = "**"

TIME_ZONE = 'America/Chicago'

LANGUAGE_CODE = 'en-us'

#~ gettext = lambda s: s
#~ LANGUAGES = (
    #~ ('de', gettext('German')),
    #~ ('en', gettext('English')),
#~ )

SITE_ID = 1

USE_I18N = True

USE_L10N = True

USE_TZ = True

MEDIA_ROOT = current_dir + '/media/'

MEDIA_URL = '/site_media/'

STATIC_ROOT = current_dir + '/media/static/'

STATIC_URL = '/site_static/'

STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

SECRET_KEY = '***'

if DEBUG:
    TEMPLATE_LOADERS = (
        'django.template.loaders.filesystem.Loader',
        'django.template.loaders.app_directories.Loader',
    #     'django.template.loaders.eggs.Loader',
    )    
else:
    TEMPLATE_LOADERS = (
        ('django.template.loaders.cached.Loader', (
        'django.template.loaders.filesystem.Loader',
        'django.template.loaders.app_directories.Loader',
        )),
    #     'django.template.loaders.eggs.Loader',
    )

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'sensei_web.middleware.FilterPersistMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
    #~ 'sensei_web.middleware.ProfileMiddleware'

    #~ 'django.middleware.cache.UpdateCacheMiddleware',
    #~ 'django.middleware.common.CommonMiddleware',
    #~ 'django.middleware.cache.FetchFromCacheMiddleware',
)

ROOT_URLCONF = 'sensei_web.urls'

WSGI_APPLICATION = 'sensei_web.wsgi.application'

TEMPLATE_DIRS = (
    current_dir + '/templates',

)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
     'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'foo.foo',
    'foo.foo',
    #~ 'foo.foo',
    'foo.foo',
    'foo.foo',
    'foo',
   'foo.foo',
   'foo.foo_track',
    )

ACCOUNT_ACTIVATION_DAYS = 7

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}

Tags: pathdjangoconfighosturlfooemailsite
2条回答

我相信你必须明确定义一个“网站\媒体”的网址在你的网站网址.py你知道吗

像这样:

将此添加到导入

from django.conf import settings

这就是你的生活模式:

url(r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': settings.MEDIA_ROOT}))

否则,Django将假定您使用不同的web服务器来提供静态内容。顺便说一下,这是个好主意。这是一篇关于serving static content with Apache and mod_wsgi的文章

谢谢大家的帮助!结果发现这只是我犯的一个错误:(尽管后果很有趣。你知道吗

我注意到日志中有一些关于A (% csrf_token %) was used in a template, but the context did not provide the value. This is uaually caused by not using RequestContext.的有趣内容

瞧,在我的views.py中,这行是不正确的: return render_to_response('foo_track/foo_track_show.html',{'access':access})

它应该有这样的RequestContext(request)return render_to_response('foo_track/foo_track_show.html',{'access':access},RequestContext(request))

现在一切正常了。嘘!你知道吗

相关问题 更多 >