В эти дни я столкнулся с подобными проблемами и обошел их так:
- добавить пользовательский виджет, который добавляет атрибут
accept
к входному файлу - set
field.swallowResizeExceptions = True
таким образом, пользователи по крайней мере не получают ошибку сайта при загрузке неподдерживаемого типа изображения - mimetypes состояния, которые работают в описании
Определение поля выглядит следующим образом:
atapi.ImageField('image1',
swallowResizeExceptions = True,
widget = atapi.ImageWidget(
label = _(u"Image 1"),
description = _(u"Image used in listings. (JPEG, PNG and GIF are supported)"),
show_content_type = False,
accept = 'image/*',
macro = 'mywidgets/myimage',
),
),
обратите внимание, что accept="image/jpeg,image/gif"
был проигнорирован firefox11, хотя он должен поддерживаться в соответствии с http://www.w3schools.com/tags/att_input_accept.asp
mywidgets / myimage - настраиваемая версия архетипов / скинов / виджетов / image.pt, которая используетнастроенная версия архетипов / скинов / виджетов / file.pt
<metal:define define-macro="edit">
...
<metal metal:use-macro="here/mywidgets/myfile/macros/file_upload"/>
...
и mywidgets / myfile.pt просто определяет этот макрос:
<metal:define define-macro="file_upload"
tal:define="unit accessor;
size unit/get_size | python:unit and len(unit) or 0;">
<input type="file"
size="30"
tal:attributes="name string:${fieldName}_file;
id string:${fieldName}_file;
accept widget/accept|nothing;" />
<script type="text/javascript"
tal:define="isDisabled python:test(accessor() and size!=0, 'true', 'false')"
tal:content="string:document.getElementById('${fieldName}_file').disabled=$isDisabled;">
</script>
</metal:define>