2012-03-18 3 views
1

У меня есть следующий Джанго модель с ImageField:Создание представления для Django ImageFields

class Pics(models.Model): 
    def file_path(instance, filename): 
     return '/'.join([instance.user.username, 'pics', filename]) 
    #... 
    file = models.ImageField(upload_to=file_path) 

Я знаю, что я могу назвать pic.file.url, чтобы получить URL к изображению. однако, мне интересно, использует ли Django некоторые функции для автоматического размещения этого изображения?

Код я в настоящее время работает нормально, но это кажется излишним:

#urls.py 
    urlpatterns += patterns('views', 
     url(r'media/(?P<name>\w{1,30})/pics/(?P<file>[^\\/:*?\"<>|]+)$', 'show_pic'),) 

, то на мой взгляд:

#app.views 
import mimetypes 
def show_pic(request, name, file): 
    path = u'media/%s/graphics/%s' % (name, file) 
    mime = mimetypes.guess_type(name)[0] 
    image_data = open(path, 'rb').read() 
    return HttpResponse(image_data, mimetype=mime) 
+3

Почему вы хотите использовать медиафайлы через Django? Это должно быть сделано веб-сервером. Поэтому, если вы просто ставите/загружаете файлы в путь, который веб-сервер поставляет, нет необходимости в представлении для просмотра изображений. – Jingo

ответ

5

Вместо того, чтобы создать представление, чтобы служить фотографии, которые вы можете непосредственно указывать на media/<name>/graphics/<file> и пусть ваш веб-сервер сам служит изображениям. Django не подходит для работы с статическими файлами, но ваш веб-сервер, с другой стороны, предназначен для эффективного управления ими.

+0

Я не совсем уверен, как это будет сделано. По моему мнению, я бы использовал эти образы как html элементов. Атрибут источника должен указывать на URL-адрес справа? Как подключить элемент html-изображения к моему веб-серверу (например, к оборудованию моего компьютера?)? –

+0

Получил его: [см. Документы] (https://docs.djangoproject.com/ru/dev/howto/static-files/) –

Смежные вопросы