Django ImageField по умолчанию
models.py:
class UserProfile(models.Model):
photo = models.ImageField(upload_to = get_upload_file_name,
storage = OverwriteStorage(),
default = os.path.join(settings.STATIC_ROOT,'images','generic_profile_photo.jpg'),
height_field = 'photo_height',
width_field = 'photo_width')
photo_height = models.PositiveIntegerField(blank = True, default = 0)
photo_width = models.PositiveIntegerField(blank = True, default = 0)
views.py:
def EditProfile(request):
register_generator()
source_file = UserProfile.objects.get(user = request.user).photo
args = {}
args.update(csrf(request))
args.update({'source_file' : source_file})
где-нибудь в моем шаблоне:
{% generateimage 'user_profile:thumbnail' source=source_file %}
Я получаю сообщение об ошибке:
Запрос соответствия UserProfile не существует.
в этой строке:
source_file = UserProfile.objects.get(user = request.user).photo
Проблема заключается в том, что атрибут по умолчанию ImageField не работает. Таким образом, объект не создается внутри моей модели. Как правильно использовать этот атрибут? Если я опускаю этот атрибут, объект создается без ошибок. Нужно ли передавать абсолютный или относительный путь?
Я использую django-imagekit для изменения размера изображения перед его рассылкой: http://django-imagekit.readthedocs.org/en/latest/
Ответы
Ответ 1
Если вы не определяете атрибут по умолчанию, успешно ли выполняется загрузка изображений? Когда я реализовал ImageField в моем собственном проекте django, я не использовал атрибут по умолчанию. Вместо этого я написал этот метод, чтобы получить путь к изображению по умолчанию:
def image_url(self):
"""
Returns the URL of the image associated with this Object.
If an image hasn't been uploaded yet, it returns a stock image
:returns: str -- the image url
"""
if self.image and hasattr(self.image, 'url'):
return self.image.url
else:
return '/static/images/sample.jpg'
Затем в шаблоне отобразите изображение с помощью:
<img src="{{ MyObject.image_url }}" alt="MyObject Image">
EDIT: простой пример
В views.py
def ExampleView(request):
profile = UserProfile.objects.get(user = request.user)
return render(request, 'ExampleTemplate.html', { 'MyObject' : profile } )
Затем в шаблоне включите код
<img src="{{ MyObject.image_url }}" alt="MyObject Image">
отобразит изображение.
Также для ошибки "Запрос соответствия UserProfile не существует". Предполагаю, что вы определили отношение внешнего ключа к модели User где-то в вашей модели UserProfile, правильно?