Не удается получить изображения для отображения на простом сайте Django - PullRequest
4 голосов
/ 27 января 2010

У меня очень простой сайт django, но у меня проблемы с отображением изображений, которые я загружаю в админ-панели.

my settings.py имеет следующие константы:

# Absolute path to the directory that holds media.
# Example: "/home/media/media.lawrence.com/"
MEDIA_ROOT = '/home/jeroen/programming/python/django/sitename/media'

# 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 = 'http://127.0.0.1:8000/media/'

# 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 = '/media/'

мой urls.py выглядит так:

from django.conf.urls.defaults import *
from django.conf import settings

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Example:
    # (r'^sitename/', include('sitename.foo.urls')),

    # Uncomment the admin/doc line below and add 'django.contrib.admindocs' 
    # to INSTALLED_APPS to enable admin documentation:
    (r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    (r'^admin/', include(admin.site.urls)),

    # http://docs.djangoproject.com/en/dev/howto/static-files/
    # This method is inefficient and insecure. 
    # Do not use this in a production setting. 
    # Use this only for development.
    (r'^media/(?P<path>.*)$', 'django.views.static.serve',
        {'document_root': settings.MEDIA_ROOT}),
)

и мой models.py выглядит так:

from django.db import models

class Truitje(models.Model):
    titel = models.CharField(max_length=50)
    beschrijving = models.TextField(max_length=500)
    foto = models.ImageField(upload_to='truitjes')

    def __unicode__(self):
      return self.titel

Я могу успешно загружать изображения в интерфейсе администратора, и они сохраняются в /home/jeroen/programming/python/django/sitename/media/truitjes. Но когда я, например, захожу на http://127.0.0.1:8000/media/truitjes/DSC00068.JPG, я получаю сообщение об ошибке: Page not found: /media/truitjes/DSC00068.JPG. То же самое для http://127.0.0.1:8000/media/truitjes и `` http://127.0.0.1:8000/media/givesPermission отклонено: /media/`.

Ответы [ 2 ]

11 голосов
/ 27 января 2010

Измените ваш медиа или админ URL / префикс на что-то другое.

Они не могут иметь одинаковое значение. Если они это сделают, ADMIN_MEDIA_PREFIX имеет приоритет. Это означает, что если вы пытаетесь получить доступ к http://127.0.0.1:8000/media, вы пытаетесь получить доступ к папке администратора мультимедиа.

Либо измените ADMIN_MEDIA_PREFIX:

ADMIN_MEDIA_PREFIX = '/admin-media/'

или замените MEDIA_ROOT:

# in settings.py

MEDIA_ROOT = '/home/jeroen/programming/python/django/ninikske/static'
MEDIA_URL = 'http://127.0.0.1:8000/static/'

# and in url.conf

(r'^static/(?P<path>.*)$', 'django.views.static.serve',
 {'document_root': settings.MEDIA_ROOT}),
5 голосов
/ 02 ноября 2011

В Django 1.3, если вы просто пытаетесь отобразить изображение в виде во время разработки, выполните следующие действия:

  1. Создайте папку с названием «static» в каталоге вашего приложения
  2. Поместите ваше изображение в вашу статическую папку
  3. Убедитесь, что STATIC_URL в вашем settings.py установлен на '/ static /' - это должно быть по умолчанию
  4. в вашем приложении / URL-адресах.py:

    from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    #..rest of url.py config...
    urlpatterns += staticfiles_urlpatterns()
    
  5. В вашем шаблоне везде, где вы хотите, чтобы ваше изображение отображалось, используйте этот шаблон тега:

    <img src="{{ STATIC_URL }}pic.png" />
    

Lookпо обслуживанию статических файлов в разработке здесь: https://docs.djangoproject.com/en/1.3/howto/static-files/#staticfiles-in-templates

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...