Django 1.6 загрузка изображений и медиа-путь
Поэтому у меня есть проект webfaction, в котором мне нужно создать две разные среды: одну для сервера django и одну для сервера статических файлов.
Поэтому, когда я загружаю изображение из панели администратора, я вижу, что изображение помещено в корень, который я определил, но с полным путем. Когда я возвращаю изображение в моем представлении, я получаю мой domain.com/full/media/root/path/imagename
это порождает неработающую ссылку - когда я захожу на mydomain.com/uploads/image_name, я вижу файл изображения, однако моя ссылка указывает на полный путь, а не на root_url,
Не могли бы вы помочь мне с этим? Я действительно не понимаю, как я могу исправить эту ссылку на изображение, на мой взгляд
<img src="{{ MEDIA_URL }}{{ mymodel.my_image }}" alt="{{ name }}" width="150" height="200" />
Я понимаю, что здесь так много тем, похожих на это, но ни один из них не смог бы правильно указать мне, как скрыть или изменить корневой путь на "загрузки"
У меня есть, который отлично работает в моем админе
class Movie(models.Model):
name = models.CharField(max_length=50)
def get_file_path(instance, filename):
ext = filename.split('.')[-1]
filename = "%s.%s" % (uuid.uuid4(), ext)
return os.path.join( '/home/user/webapps/project/uploads/' , filename)
my_image = models.ImageField(upload_to = get_file_path, null=True, blank=True)
def __unicode__(self):
return self.name
В моих настройках:
MEDIA_ROOT = '/home/user/webapps/project/uploads/'
MEDIA_URL = '/uploads/'
и URL проекта:
из шаблонов импорта django.conf.urls, включая URL-адрес из настроек импорта django.conf
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
)
if settings.DEBUG:
urlpatterns += patterns('',
(r'^uploads/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT}))
Спасибо всем заранее
2 ответа
Сначала для вашей модели вы должны создать поле изображения, и там вы должны определить, куда вы хотите загрузить свое изображение:
class mymodel(models.Model):
name = models.CharField(max_length=50)
my_image = models.ImageField(blank=True, null=True,upload_to='/home/user/webapps/project/uploads/')
После этого в вашем шаблоне, когда вы хотите показать свое изображение после получения объекта модели из вашей базы данных, попробуйте это:
<img src="{{ mymodel.my_image.url }}" alt="{{ mymodel.name }}" width="150" height="200" />