Уведомления

Группа в Telegram: @pythonsu

#1 Май 25, 2014 13:11:35

zlodiak
От: Россия
Зарегистрирован: 2014-01-19
Сообщения: 159
Репутация: +  0  -
Профиль   Адрес электронной почты  

добавить теги в виджет

помогите пожалуйста решить проблему

я использовал для формы загрузки изображения стандартный виджет. но меня не устраивает разметка. хотелось бы удалить некоторые теги и добавить новые. для этого я использовал переопределение метода render()

models:

class Aaa(User):			
	drum_photo = models.ImageField('Фото',upload_to='aaa/photo/', 	blank=True,null=True,)

forms:
from app_drummersaransk.widgets import ImageWidget
class DrumDataForm(forms.ModelForm):	
	drum_photo = forms.ImageField(	widget = ImageWidget())	
			
	class Meta:
		model = Aaa
		fields = (
			#'drum_photo', 
		)	

widgets.py:
from django.contrib.admin.widgets import AdminFileWidget
from django.utils.safestring import mark_safe
import os
class ImageWidget(AdminFileWidget):
	def render(self, name, value, attrs=None):
		output = []
		if value and getattr(value, "url", None):
			image_url = value.url
			file_name=str(value)
			# defining the size
			size='100x100'
			x, y = [int(x) for x in size.split('x')]
			try :
				# defining the filename and the miniature filename
				filehead, filetail  = os.path.split(value.path)
				basename, format        = os.path.splitext(filetail)
				miniature                   = basename + '_' + size + format
				filename                        = value.path
				miniature_filename  = os.path.join(filehead, miniature)
				filehead, filetail  = os.path.split(value.url)
				miniature_url           = filehead + '/' + miniature
				# make sure that the thumbnail is a version of the current original sized image
				if os.path.exists(miniature_filename) and os.path.getmtime(filename) > os.path.getmtime(miniature_filename):
					os.unlink(miniature_filename)
				# if the image wasn't already resized, resize it
				if not os.path.exists(miniature_filename):
					image = Image.open(filename)
					image.thumbnail([x, y], Image.ANTIALIAS)
					try:
						image.save(miniature_filename, image.format, quality=100, optimize=1)
					except:
						image.save(miniature_filename, image.format, quality=100)
				output.append(u'<hr /><hr /><hr /><div><a href="%s" target="_blank"><img src="%s" alt="%s" /></a></div> %s ' % \
				(miniature_url, miniature_url, miniature_filename, _('Change:')))
			except:
				pass
			output.append(super(AdminFileWidget, self).render(name, value, attrs))
		return mark_safe(u'++++++++++++++++'.join(output))

в результате форме поле загрузки вообще не выводится. при этом если в forms.py я раскомментирую строку
#'drum_photo',
, то выводится стандартное поле загрузки формы

а мне нужно чтобы выводилась моё кастомизированное поле. в данном случае со знаками плюсика и
<br />
(это для упрощения. на самом деле будут более сложная система тегов)

ps
сама моя форма выводится не в админке, а в интерфейса, который я сделал для пользователей на морде сайта

Отредактировано zlodiak (Май 25, 2014 13:12:50)

Офлайн

#2 Май 25, 2014 13:23:57

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

добавить теги в виджет

А не проще эту форму в шаблоне собрать?



Офлайн

#3 Май 25, 2014 15:02:00

zlodiak
От: Россия
Зарегистрирован: 2014-01-19
Сообщения: 159
Репутация: +  0  -
Профиль   Адрес электронной почты  

добавить теги в виджет

максимум что я смогу сделать в шаблоне так это ручками прописать

<input type="file"  и т.д. >
, но дело в том, что дефолтный джанговский виджет содержит ещё много интересного. например чекбокс для уничтожения изображения, метка с названием файла, загруженного в настоящее время

плюс к тому с валидацией будет запара. у меня ведь в этой форе ещё полей 20 есть. я здесь задачу упростил чтобы не грузить форумчан

Отредактировано zlodiak (Май 25, 2014 15:49:27)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version