Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 20, 2009 14:06:33

Pydj
От:
Зарегистрирован: 2009-02-07
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по изображениям в Django

Изучаю Django 1.0.2 по Djangobook
Прочитал еще не все, но почему то нигде не могу в этой книге найти информацию, как быть с изображениями? В книге приводится пример с тремя моделями - Авторы, Издатели и Книги. А если я хочу еще добвить изображения к книжкам и чтобы они выводились в шаблонах в одинаковых размерах???
Подскажите, плиз, где найти такую информацию

Вот мой код:

booksite/books/models.py

# -*- coding: utf-8 -*-
from django.db import models

class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField()

def __unicode__(self):
return self.name

class Meta:
ordering = ['-name']

class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField(blank=True, verbose_name='почта')

def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name)

class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author) # связь с данными из таблицы Author
publisher = models.ForeignKey(Publisher) # Внешний ключ к таблице Publisher
publication_date = models.DateField(blank=True, null=True)

def __unicode__(self):
return self.title
booksite/books/views.py

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.shortcuts import render_to_response
from booksite.books.models import Publisher, Author, Book



def publisher(request):
pub = Publisher.objects.all()
return render_to_response('pub.html', {'pub': pub})

def archive(request):
bk = Book.objects.filter(title__contains="Dj")
return render_to_response('archive.html', {'bk': bk})


def index(request):
return render_to_response('index.html')
booksite/books/templates/pub.html

{% extends "base.html" %}

{% block title %}Книги{% endblock %}
{% block banner %}{% endblock %}
{% block content %}
{% for x in pub %}
<h1>{{ x.name }}</h1>
<p>{{ x.address }}</p>
<p>{{ x.website }}</p>
<hr/>

{% endfor %}


{% endblock %}



Отредактировано (Июнь 20, 2009 14:08:06)

Офлайн

#2 Июнь 20, 2009 15:52:21

Tardos Mors
От:
Зарегистрирован: 2007-11-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по изображениям в Django

За изображение отвечает поле ImageField (дла работы должна быть установлена PIL — http://www.pythonware.com/products/pil/).
Считать высоту и ширину картинки (в т.ч. и из шаблона) можно как image.width и image.height. А вот подгонять все изображения к одному размеру уже сложнее. Первое что приходить в голову — создать отдельную функцию и подключить к модели через сигнал post_save (вот так:)

# models.py
from django.db.models.signals import post_save

#... описание моделей ...

def resize(sender, *args, **kwargs):
# Экземпляр модели передается как kwargs['instance'].
# Тут должен быть код, уменьшающий картинку до нужного размера :-)
# Как его написать посмотрите в документации к PIL (ссылка выше), там всего несколько строчек.
pass

post_save.connect(resize, sender=Book)



Офлайн

#3 Июнь 21, 2009 00:09:29

Pydj
От:
Зарегистрирован: 2009-02-07
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по изображениям в Django

Спасибо! Буду пытаться дальше!



Офлайн

#4 Июнь 21, 2009 00:50:04

Pydj
От:
Зарегистрирован: 2009-02-07
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по изображениям в Django

Ребята, может кто-нибудь подскажет подробнее о том, как в Джанго выводить изображение на страницу. В djangobook об этом как-то вскользь описано. У меня выводится на страницу описания книг, а добавить картинки к этим описанием не получается.
Может быть есть какие-нибудь более подробные туториалы или решения на эту тему?



Офлайн

#5 Июнь 21, 2009 10:06:45

Tardos Mors
От:
Зарегистрирован: 2007-11-22
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по изображениям в Django

У поля ImageField есть метод url. В шаблоне нужно написать что-то вроде:

<img src='{{ object.image.url }}'>
Для работы этого в settings.py нужно задать MEDIA_ROOT и MEDIA_URL.



Офлайн

#6 Июнь 21, 2009 12:50:37

Pydj
От:
Зарегистрирован: 2009-02-07
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по изображениям в Django

Tardos Mors, спасибо за помощь, но я все еще не могу сделать, что хочу (хотя уже очень рядом!). Подскажите, в чем у меня ошибка. Выводится просто место под картинку, а не сама картинка

settings.py

MEDIA_ROOT = 'C:/booksite/media/'

MEDIA_URL = 'http://booksite/media/'
models.py

class Article(models.Model):
title = models.CharField(max_length=200)
anonce = models.TextField()
body = models.TextField()
url = models.URLField(unique=True)
date = models.DateTimeField()
image = models.ImageField(upload_to='media/')
views.py
def art(request):
art = Article.objects.all()
return render_to_response('art.html', {'art': art})
urls.py
urlpatterns = patterns('',
('^$', index),
(r'^books/$', archive),
(r'^pub/$', publisher),
(r'^article/$', art),
(r'^admin/(.*)', admin.site.root),
art.html


{% for art in art %}
<h1>{{ art.title }}</h1>
<h3>{{art.anonce }}</h3>
<img src='{{art.image}}'>

<hr/>

{% endfor %}
title и anonce выводятся нормально, а картинка - нет =(



Отредактировано (Июнь 21, 2009 12:53:51)

Офлайн

#7 Июнь 22, 2009 14:36:24

sv0
От:
Зарегистрирован: 2009-03-04
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по изображениям в Django

В шаблоне art.image.url нужно добавить



Офлайн

#8 Июнь 22, 2009 17:58:39

Pydj
От:
Зарегистрирован: 2009-02-07
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по изображениям в Django

sv0
В шаблоне art.image.url нужно добавить
не помогло.
Вообще, не знаю, что делать, уже 3 дня хочу вывести изображение - не получается



Офлайн

#9 Июнь 22, 2009 19:02:04

sv0
От:
Зарегистрирован: 2009-03-04
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по изображениям в Django

Попробуйту в shell посмотреть, что скажет:

./manage.py shell
>>> from your_app.models import Article
>>> Article.objects.all()[0].image.url
где your_app - имя вашего приложенния.
в примере должно вывести URL изображения из первой статьи.



Офлайн

#10 Июнь 22, 2009 19:23:48

Pydj
От:
Зарегистрирован: 2009-02-07
Сообщения: 55
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по изображениям в Django

sv0
Попробуйту в shell посмотреть, что скажет:

./manage.py shell
>>> from your_app.models import Article
>>> Article.objects.all()[0].image.url
где your_app - имя вашего приложенния.
в примере должно вывести URL изображения из первой статьи.
вывело u'http://127.0.0.1:8000/media/media/5.jpg'



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version