Хотя Python работает без файла __init__.py
, вы все равно должны его включать.
Он указывает, что пакет следует рассматривать как модуль, поэтому включите его (даже если он пуст).
Существует также случай, когда вы действительно можете использовать файл __init__.py
:
Представьте, что у вас была следующая файловая структура:
main_methods
|- methods.py
И methods.py
содержал это:
def foo():
return 'foo'
Чтобы использовать foo()
, вам понадобится одно из следующих:
from main_methods.methods import foo # Call with foo()
from main_methods import methods # Call with methods.foo()
import main_methods.methods # Call with main_methods.methods.foo()
Возможно, вам нужно (или хотите ), чтобы сохранить methods.py
внутри main_methods
(например, время выполнения / зависимости), но вы хотите импортировать main_methods
.
Если вы изменили имя methods.py
на __init__.py
то вы можете использовать foo()
, просто импортировав main_methods
:
import main_methods
print(main_methods.foo()) # Prints 'foo'
Это работает, потому что __init__.py
рассматривается как часть пакета.
Некоторые Python пакеты действительно делают это. Например, JSON , где запуск import json
фактически импортирует __init__.py
из пакета json
(, см. Структуру файла пакета здесь ):
Исходный код:
blockquote>Lib/json/__init__.py
Необходимо использовать метод для обработки загруженного файла, как продемонстрировано в документация Django .
В этом методе, Вы могли связать блоки в переменной (вместо того, чтобы писать им в диск непосредственно), создать Изображение PIL из той переменной, изменить размеры изображения и сохранить его на диск.
В PIL, необходимо посмотреть Image.fromstring
и Image.resize
.
Я настоятельно рекомендую sorl-миниатюра приложение для обработки изображения, изменяющего размеры легко и прозрачно. Это входит в каждый проект Django, который я запускаю.
Я рекомендую использовать StdImageField от django-stdimage, он должен обработать всю грязную работу для Вас. Это просто в использовании, Вы просто определяете размеры измененного изображения в определении поля:
class MyModel(models.Model):
image = StdImageField(upload_to='path/to/img', size=(640, 480))
Выезд документы — это может сделать миниатюры также.