Первоначально я задал этот вопрос в очереди вопросов о трясогузках, и я думаю, что это было неподходящее место для него. (Хотя я думаю, что это ошибка в документации. .)
Во всяком случае, моя проблема в том, что у меня есть собственный класс StructBlock
, который использует внутри него ListBlock
. Мне нужно определить метод js_initializer()
в моем пользовательском классе, который заставляет форму запускать как мой собственный инициализатор , так и инициализатор ListBlock
.
Моя первоначальная попытка, основанная на документах, выглядела так: :
# my_blocks.py
class ImageGalleryBlock(blocks.StructBlock):
images = ListBlock(ImageChooserBlock(label='Image'))
def js_initializer(self):
return "ImageGallery"
@property
def media(self):
return forms.Media(
js=['app/js/admin/image-gallery.js']
)
# image-gallery.js
function ImageGallery(prefix) {
// Set up the Image Gallery block's custom form behavior...
}
Это заставляет функцию ImageGallery()
работать, но не запускает инициализатор ListBlock
, поэтому ни одна из его кнопок не работает.
В очереди на выпуск трясогузки мне порекомендовали попробовать что-то вроде этого:
def js_initializer(self):
initializer_js = super(HeadingBlock, self).js_initializer()
my_custom_js = 'ImageGallery("%s")' % self.definition_prefix
if initializer_js:
# child blocks have custom JS initializers and need to be used
return '%s,\n%s' % (initializer_js, my_custom_js)
return my_custom_js
# image-gallery.js
function ImageGallery(prefix) {
var init_image_gallery = function(element_prefix) {
// Do stuff...
};
return init_image_gallery;
}
Мне пришлось внести несколько улучшений в исходное предложение, чтобы часть ImageGallery()
заработала, но инициализатор ListBlock
по-прежнему не запускался.
Вот как выглядит код инициализатора, сгенерированный для ImageGalleryBlock
:
{
'name': ('ImageGalleryBlock'),
'initializer': (StructBlock({
'images': (ListBlock({
'definitionPrefix': ('blockdef-63')
}))
}),
ImageGallery("blockdef-91"))
},
У меня такое ощущение, что на самом деле мне нужно добавить еще один ключ к dict, передаваемому в StructBlock
, но я понятия не имею, как это сделать.
ImageGalleryBlock
. Вы можете сказать, что слишком сильно сократили его. Это должно быть правильно, сейчас. - person coredumperror   schedule 09.12.2017