У меня есть база данных Django, полная городов. Я хотел бы использовать панель администратора Django для загрузки нескольких фотографий каждого города на мой сервер в некоторых папках say/images/country_name/state/city /. Это, вероятно, будет добавлено в форму администратора города, так что изображения и информация могут быть отредактированы на одной странице. Мне также нужно выбрать основное изображение и преобразовать его в миниатюру, чтобы его можно было использовать в результатах поиска. Каковы хорошие способы реализации этого типа функциональности? Есть ли хорошие дополнения django, которые могли бы помочь мне справиться с этими задачами?Загрузка изображений в Django Admin
0
A
ответ
4
вы можете сделать пару моделей, связанных друг с другом и добавить изображение в качестве TabularInline
в Джанго-администратора, как:
# models.py
class City(models.Model):
# your fields
class CityImage(models.Model):
city = models.ForeignKey('City', related_name='images')
image = models.ImageField(upload_to=image_upload_path)
# admin.py
from django.contrib import admin
from myapp.models import City, CityImage
class CityImageInline(admin.TabularInline):
model = CityImage
class CityAdmin(admin.ModelAdmin):
inlines = [CityImageInline]
admin.site.register(City, CityAdmin)
Что касается эскиза, вы должны были бы в вашей City
модели таким образом, чтобы решить, какой из связанных изображений вы хотите использовать в качестве эскиза, а затем сделать что-то вроде:
import Image
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
from django.core.files.base import ContentFile
# other imports and models
class City(models.Model):
# your fields
def get_thumbnail(self, thumb_size=None):
# find a way to choose one of the uploaded images and
# assign it to `chosen_image`.
base = Image.open(StringIO(chosen_image.image.read())) # get the image
size = thumb_size
if not thumb_size:
# set a default thumbnail size if no `thumb_size` is given
rate = 0.2 # 20% of the original size
size = base.size
size = (int(size[0] * rate), int(size[1] * rate))
base.thumbnail(size) # make the thumbnail
thumbnail = StringIO()
base.save(thumbnail, 'PNG')
thumbnail = ContentFile(thumbnail.getvalue()) # turn the tumbnail to a "savable" object
return thumbnail
Надеюсь, это пригодится! :)
Смежные вопросы
- 1. Загрузка изображений Django Python
- 2. Визуализация загруженных изображений в Django Admin
- 3. Загрузка изображения через Admin в Django
- 4. Показать изображения Загрузка в Admin с помощью FileField в Django
- 5. Django-Filebrowser и загрузка изображений
- 6. Django CKEditor Загрузка изображений не отображается
- 7. Загрузка файлов с помощью Django Admin
- 8. Загрузка нескольких изображений в администратор Django
- 9. Загрузка изображений в статическом файле
- 10. Добавить много в Django Admin
- 11. Django Custom Admin Order
- 12. Загрузка нескольких изображений в администраторе Django для галереи
- 13. Django - django-admin-tools
- 14. Django admin inline
- 15. Загрузка изображений из двух форм - Django
- 16. Django - загрузка больших изображений включает дополнительный стиль
- 17. Django Admin
- 18. Django contrib admin admin admin и пароль
- 19. Отображение изображений Thumbnails вместо пути изображения в Django Admin
- 20. Django - Загрузка изображений из папок внутри медиапапки
- 21. Загрузка нескольких изображений с помощью Django
- 22. django-rest-framework и загрузка изображений
- 23. Загрузка файла admin в Django с текущей идентификацией модели
- 24. Django admin DoesNotExist at/admin/
- 25. Словарь в Django admin
- 26. в каталогах django admin
- 27. Взаимоотношения в Django Admin
- 28. настройки в django admin
- 29. методы в django admin
- 30. ManyToManyFields в Django Admin
Можете ли вы изменить путь загрузки ImageField динамически? Чтобы я мог загружать изображения в/images/country_name/state_name/city_name/например? – HighLife
Да, вы можете. upload_to может быть функцией, которая возвращает путь. Проверьте это: https://docs.djangoproject.com/en/1.4/ref/models/fields/#django.db.models.FileField.upload_to – Gerard