2014-10-17 50 views
0

所以,我創建在Django一個新的應用程序通過python manage.py startapp foo新的Django應用程序MEDIA_URL徑處理不正確

我的新的應用程序將不會加載任何文件在/site_media/目錄,通過{{ MEDIA_URL }}。他們正試圖從App的目錄中找到路徑,而不是/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 }},但是這會打破網站其他部分的路徑。

我不確定還有什麼人希望看到嘗試和診斷問題,但我很難過!在我的應用程序目錄

#!/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, 
     }, 
    } 
} 
+0

在你的'TEMPLATE_CONTEXT_PROCESSORS'設置中有'django.core.context_processors.media'嗎? – shuttle87 2014-10-17 17:24:19

+0

嗯。我沒有'TEMPLATE_CONTEXT_PROCESSORS',並懇求無知,因爲我根本沒有配置網站。最後,「責備」我的同事,大聲笑。所以我應該添加這裏列出的塊([https://docs.djangoproject.com/en/1.4/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS]),並應該得到一些建設性的錯誤信息? – 2014-10-17 17:30:33

+0

@ shuttle87我試着添加你所說的塊和nada。 – 2014-10-17 18:07:19

回答

1

謝謝大家的幫忙!事實證明,這只是我犯的一個錯誤:(儘管非常有趣的後果。

我注意到在日誌中約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))

現在一切正常。嘖!