Как использовать ImageField или FileField

48 views
Skip to first unread message

pazz

unread,
May 17, 2009, 6:43:58 PM5/17/09
to Django russian
Расскажите плз вкратце что надо сделать чтоб залить картинку без
помощи админки.
не надо посылать меня к документации: я ее уже посмотрел но у меня не
работает...

На примере:

SETTINGS.py

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'media')
MEDIA_URL = '/media/'

MODELS.py

class img(models.Model):
image = models.FileField(upload_to='images',null=True)

код:

from mysite.myapp.models import img
from django.core.files import File
a=img()
f=open('<абсолютный путь где-то на компе>')
a.image=File(f)
f.close()
a.save()

в процессе выполнения код ошибок не выдает.
запускаю админку, там обьек появляется,но там отображается <абсолютный
путь где-то на компе>, а если щелкаю по ссылке на файл, то он пытается
открыть путь http://localhost:8000/<абсолютный путь где-то на компе>.
если через админку, то все конечно нормально аплоудится..

с ImageField вообще труба. даже через админку не работает: пишет что
не картинка не прошла валидацию...


Serge Matveenko

unread,
May 18, 2009, 3:41:26 AM5/18/09
to django-...@googlegroups.com
2009/5/18 pazz <pazu...@gmail.com>:
> Расскажите плз вкратце что надо сделать чтоб залить картинку без
> помощи админки.
> не надо посылать меня к документации:  я ее уже посмотрел но у меня не
> работает...

1. Снаружи используйте формы, будет меньше геморроя

2. Можно так:

from django.core.files import File

file = File(NamedTemporaryFile())
file.write(contents)

model_instance.file_field.save(filename, file, save=False)

model_instance.save()


--
Serge Matveenko
moikrug:http://slki.ru/1
linkedin:http://slki.ru/1f
xmpp:se...@matveenko.ru


signature.asc

Dmitry Shevchenko

unread,
May 18, 2009, 3:53:11 AM5/18/09
to django-...@googlegroups.com
Когда документации не хватает надо смотреть в тесты, например
http://code.djangoproject.com/browser/django/trunk/tests/modeltests/files/models.py#L67

правда у меня почему-то физически файл на диск не сохранялся, надо чуть больше покопать.

2009/5/18 pazz <pazu...@gmail.com>



--
Best regards, Dmitry Shevchenko.

Андрей Фефелов

unread,
May 18, 2009, 4:45:52 AM5/18/09
to django-...@googlegroups.com
Как вариант можно использовать STDImage(есть в гкоде). Я его использую для админки. Довольно удобен - но есть несколько багов. Лечится - правкой исходников.

18 мая 2009 г. 13:53 пользователь Dmitry Shevchenko <dmi...@gmail.com> написал:



--
С уважением, Андрей Фефелов

Pazz

unread,
May 18, 2009, 2:32:08 PM5/18/09
to Django russian


On 18 май, 11:41, Serge Matveenko <se...@matveenko.ru> wrote:
> 2009/5/18 pazz <pazuu....@gmail.com>:
>
>     from django.core.files import File
>
>     file = File(NamedTemporaryFile())
>     file.write(contents)
>
>     model_instance.file_field.save(filename, file, save=False)
>
>     model_instance.save()

Вроде сработало! Спасибо.
Осталась одна проблема: когда я щелкаю по ссылке на файл
http://localhost:8000/media/images/picture.jpg.
вылезает ошибка:
"Page not found: /Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/site-packages/django/contrib/admin/media/images/picture.jpg"

В URLs.py я добавил

media_img = os.path.join(
os.path.dirname(__file__), 'media','images'
)

(r'^media/images/(?P<path>.*)$', 'django.views.static.serve',
{ 'document_root': media_img }),

Pazz

unread,
May 18, 2009, 4:48:28 PM5/18/09
to Django russian
Нашел в этой группе такую же проблему и указанное там решение помогло.
Нельзя что бы в SETTINGS.py были одинаковые MEDIA_URL и
ADMIN_MEDIA_PREFIX !
сделал
MEDIA_URL = '/site-media/'
ADMIN_MEDIA_PREFIX = '/media/'

и все заработало!

On 18 май, 22:32, Pazz <pazuu....@gmail.com> wrote:
> On 18 май, 11:41, Serge Matveenko <se...@matveenko.ru> wrote:
>

> Осталась одна проблема: когда я щелкаю  по ссылке на файлhttp://localhost:8000/media/images/picture.jpg.

wiz

unread,
May 19, 2009, 2:15:22 AM5/19/09
to django-...@googlegroups.com
ADMIN_MEDIA_PREFIX = MEDIA_URL + 'admin/'
сильно менее криво чем иметь две разных статики.

2009/5/19 Pazz <pazu...@gmail.com>:

--
GNU/Hippie
... ~]# make love

Yuri Baburov

unread,
May 19, 2009, 2:19:55 AM5/19/09
to django-...@googlegroups.com
о, крайне удобный вариант. а для dev server он нормально работает?

2009/5/19 wiz <aenor...@gmail.com>:

--
Best regards, Yuri V. Baburov, ICQ# 99934676, Skype: yuri.baburov,
MSN: bu...@live.com

wiz

unread,
May 19, 2009, 2:21:17 AM5/19/09
to django-...@googlegroups.com
я обычно делаю симлинк в медиа-руте на адмику и везде работает.

2009/5/19 Yuri Baburov <bur...@gmail.com>:


> о, крайне удобный вариант. а для dev server он нормально работает?
>
> 2009/5/19 wiz <aenor...@gmail.com>:
>> ADMIN_MEDIA_PREFIX = MEDIA_URL + 'admin/'
>> сильно менее криво чем иметь две разных статики.
>>
>> 2009/5/19 Pazz <pazu...@gmail.com>:
>>> Нашел в этой группе такую же проблему и указанное там решение помогло.
>>> Нельзя что бы в SETTINGS.py были одинаковые MEDIA_URL и
>>> ADMIN_MEDIA_PREFIX !
>>> сделал
>>> MEDIA_URL = '/site-media/'
>>> ADMIN_MEDIA_PREFIX = '/media/'
>>>
>>> и все заработало!

Pavel Yurevich

unread,
May 19, 2009, 5:25:40 AM5/19/09
to Django russian
а что за проблема с валидацией картинок для ImageField? как решить?

Dmitry Shevchenko

unread,
May 19, 2009, 5:29:26 AM5/19/09
to django-...@googlegroups.com
а что за картинка?

2009/5/19 Pavel Yurevich <pazu...@gmail.com>

а что за проблема с валидацией картинок для ImageField? как решить?

pazz

unread,
May 20, 2009, 6:20:52 AM5/20/09
to Django russian
да обычная картинка) жпг... гифы тоже пробовал.

On 19 май, 13:29, Dmitry Shevchenko <dmi...@gmail.com> wrote:
> а что за картинка?
>

> 2009/5/19 Pavel Yurevich <pazuu....@gmail.com>

pazz

unread,
May 20, 2009, 6:23:46 AM5/20/09
to Django russian
Reply all
Reply to author
Forward
0 new messages