Django: MEDIA_URL gibt Seite nicht gefunden zurück
settings.py
<code># -*- coding: utf-8 -*- # Django settings for basic pinax project. import os.path import posixpath PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) DEBUG = True TEMPLATE_DEBUG = DEBUG # tells Pinax to serve media through the staticfiles app. SERVE_MEDIA = DEBUG # django-compressor is turned off by default due to deployment overhead for # most users. See <URL> for more information COMPRESS = False INTERNAL_IPS = [ "127.0.0.1", ] ADMINS = [ # ("Your Name", "[email protected]"), ] MANAGERS = ADMINS DATABASES = { "default": { "ENGINE": "django.db.backends.sqlite3", # Add "postgresql_psycopg2", "postgresql", "mysql", "sqlite3" or "oracle". "NAME": "dev.db", # Or path to database file if using sqlite3. "USER": "", # Not used with sqlite3. "PASSWORD": "", # Not used with sqlite3. "HOST": "", # Set to empty string for localhost. Not used with sqlite3. "PORT": "", # Set to empty string for default. Not used with sqlite3. } } # Local time zone for this installation. Choices can be found here: # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name # although not all choices may be available on all operating systems. # If running in a Windows environment this must be set to the same as your # system time zone. TIME_ZONE = "US/Eastern" # Language code for this installation. All choices can be found here: # http://www.i18nguy.com/unicode/language-identifiers.html LANGUAGE_CODE = "en-us" SITE_ID = 1 # If you set this to False, Django will make some optimizations so as not # to load the internationalization machinery. USE_I18N = True # Absolute path to the directory that holds media. # Example: "/home/media/media.lawrence.com/" MEDIA_ROOT = os.path.join(PROJECT_ROOT, "static") # URL that handles the media served from MEDIA_ROOT. Make sure to use a # trailing slash if there is a path component (optional in other cases). # Examples: "http://media.lawrence.com", "http://example.com/media/" MEDIA_URL = "/site_media/media/" # Absolute path to the directory that holds static files like app media. # Example: "/home/media/media.lawrence.com/apps/" STATIC_ROOT = os.path.join(PROJECT_ROOT, "site_media", "static") # URL that handles the static files like app media. # Example: "http://media.lawrence.com" STATIC_URL = "/site_media/static/" # Additional directories which hold static files STATICFILES_DIRS = [ os.path.join(PROJECT_ROOT, "static"), os.path.join(PROJECT_ROOT, "media"), ] STATICFILES_FINDERS = [ "staticfiles.finders.FileSystemFinder", "staticfiles.finders.AppDirectoriesFinder", "staticfiles.finders.LegacyAppDirectoriesFinder", "compressor.finders.CompressorFinder", ] # URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a # trailing slash. # Examples: "http://foo.com/media/", "/media/". ADMIN_MEDIA_PREFIX = posixpath.join(STATIC_URL, "admin/") # Subdirectory of COMPRESS_ROOT to store the cached media files in COMPRESS_OUTPUT_DIR = "cache" # Make this unique, and don't share it with anybody. SECRET_KEY = "HIDDEN" # List of callables that know how to import templates from various sources. TEMPLATE_LOADERS = [ "django.template.loaders.filesystem.load_template_source", "django.template.loaders.app_directories.load_template_source", ] MIDDLEWARE_CLASSES = [ "django.middleware.common.CommonMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django_openid.consumer.SessionConsumer", "django.contrib.messages.middleware.MessageMiddleware", "pinax.apps.account.middleware.LocaleMiddleware", "pagination.middleware.PaginationMiddleware", "pinax.middleware.security.HideSensistiveFieldsMiddleware", "debug_toolbar.middleware.DebugToolbarMiddleware", ] ROOT_URLCONF = "ezstyler.urls" TEMPLATE_DIRS = [ os.path.join(PROJECT_ROOT, "templates"), ] TEMPLATE_CONTEXT_PROCESSORS = [ "django.contrib.auth.context_processors.auth", "django.core.context_processors.debug", "django.core.context_processors.i18n", "django.core.context_processors.media", "django.core.context_processors.request", "django.contrib.messages.context_processors.messages", "staticfiles.context_processors.static", "pinax.core.context_processors.pinax_settings", "pinax.apps.account.context_processors.account", "notification.context_processors.notification", "announcements.context_processors.site_wide_announcements", ] INSTALLED_APPS = [ # Django "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.sites", "django.contrib.messages", "django.contrib.humanize", "pinax.templatetags", # theme "pinax_theme_foundation", # external "notification", # must be first "staticfiles", "compressor", "debug_toolbar", "mailer", "django_openid", "timezones", "emailconfirmation", "announcements", "pagination", "idios", "metron", # Pinax "pinax.apps.account", "pinax.apps.signup_codes", # project "about", "profiles", "outfits", ] FIXTURE_DIRS = [ os.path.join(PROJECT_ROOT, "fixtures"), ] MESSAGE_STORAGE = "django.contrib.messages.storage.session.SessionStorage" EMAIL_BACKEND = "mailer.backend.DbBackend" ABSOLUTE_URL_OVERRIDES = { "auth.user": lambda o: "/profiles/profile/%s/" % o.username, } AUTH_PROFILE_MODULE = "profiles.Profile" NOTIFICATION_LANGUAGE_MODULE = "account.Account" ACCOUNT_OPEN_SIGNUP = True ACCOUNT_USE_OPENID = False ACCOUNT_REQUIRED_EMAIL = False ACCOUNT_EMAIL_VERIFICATION = False ACCOUNT_EMAIL_AUTHENTICATION = False ACCOUNT_UNIQUE_EMAIL = EMAIL_CONFIRMATION_UNIQUE_EMAIL = False AUTHENTICATION_BACKENDS = [ "pinax.apps.account.auth_backends.AuthenticationBackend", ] LOGIN_URL = "/account/login/" # @@@ any way this can be a url name? LOGIN_REDIRECT_URLNAME = "what_next" LOGOUT_REDIRECT_URLNAME = "home" EMAIL_CONFIRMATION_DAYS = 2 EMAIL_DEBUG = DEBUG DEBUG_TOOLBAR_CONFIG = { "INTERCEPT_REDIRECTS": False, } # local_settings.py can be used to override environment-specific settings # like database and email that differ between development and production. try: from local_settings import * except ImportError: pass </code>
Undurls.py wenn es hilft:
<code>from django.conf.urls.defaults import * from outfits.views import * import settings urlpatterns = patterns("", # Outfits url(r'^$', outfit_list, name='outfit_list'), url(r'^new/$', outfit_create, name='outfit_create'), url(r'^detail/(\d+)/$', outfit_detail, name='outfit_detail'), url(r'^update/(\d+)/$', outfit_update, name='outfit_update'), url(r'^delete/(\d+)/$', outfit_delete, name='outfit_delete'), # Products url(r'^detail/(\d+)/add/confirm/$', product_confirm, name='product_confirm'), url(r'^outfit_displayImg/$', outfits_displayImg), url(r'^detail/(\d+)/add/$', product_add, name='product_add'), url(r'^detail/(\d+)/update/(\d+)$', product_update, name='product_update'), url(r'^detail/(\d+)/delete/(\d+)$', product_delete, name='product_delete'), ) if settings.DEBUG: urlpatterns += patterns('', url(r'^site_media/media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}), ) </code>
In meiner Vorlage gibt {{MEDIA_URL}} {{p.images}} die richtige URL zurückhttp://127.0.0.1:8000/site_media/media/products/co_macysLogo3.gif, aber wenn ich es öffne, bekomme ichSeite nicht gefunden.
Die Akte ist dort, also bin ich nicht sicher, warum sie sich beschwert. Ich habe 3 oder 4 andere Fragen zu SO angeschaut, die meinen ähnlich sind, aber keine ihrer Antworten hat mein Problem gelöst. Seltsamerweise funktioniert meine {{STATIC_URL}} einwandfrei, aber die nicht {{MEDIA_URL}}. Ich würde natürlich STATIC_URL verwenden, wenn ich könnte, nur um meine Anwendung zum Laufen zu bringen, aber leider lädt der ImageField-Parameter upload_to von Django nur Bilder in den Medienordner hoch.
AKTUALISIEREN: Ändern von MEDIA_ROOT inMEDIA_ROOT = os.path.join(PROJECT_ROOT, "static")
und das Aufrufen meines Bildes über {{STATIC_URL}} {{p.images}} löste das Problem. Ich wünschte, es gäbe einen besseren Weg. Ich verstehe immer noch nicht, warum Django eine Bilddatei von MEDIA_URL nicht ausflippen kann.