Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django ImageField小部件添加带有clearable复选框的缩略图_Django_Checkbox_Django Admin_Django Models_Django Widget - Fatal编程技术网

Django ImageField小部件添加带有clearable复选框的缩略图

Django ImageField小部件添加带有clearable复选框的缩略图,django,checkbox,django-admin,django-models,django-widget,Django,Checkbox,Django Admin,Django Models,Django Widget,我有一个这样的模型 class Participation(models.Model): # ... some attributes ... thumbnail = models.ImageField( verbose_name='immagine di copertina', blank=True, null=True, ) 我添加了以下代码以在管理页面中显示缩略图: class AdminImageWidget(Cle

我有一个这样的模型

class Participation(models.Model):
    # ... some attributes ...
    thumbnail = models.ImageField(
        verbose_name='immagine di copertina',
        blank=True,
        null=True,
    )
我添加了以下代码以在管理页面中显示缩略图:

class AdminImageWidget(ClearableFileInput):
"""A ImageField Widget for admin that shows a thumbnail"""

def render(self, name, value, attrs=None):
    output = []
    if value and getattr(value, 'url', None):
        image_url = value.url
        file_name = str(value)
        output.append(
            u'%s '
            u'<a href="%s" target="_blank">'
            u'<img src="%s" alt="%s" style="max-width: 100px; max-height: 100px; border-radius: 5px;" />'
            u'</a><br/><br/>%s '
            % (_('Currently:'), image_url, image_url, file_name, _('Change:'))
        )
    output.append(super(ClearableFileInput, self).render(name, value, attrs))
    return mark_safe(u''.join(output))
class AdminImageWidget(ClearableFileInput):
“”“显示缩略图的管理员的ImageField小部件”“”
def render(自身、名称、值、属性=无):
输出=[]
if值和getattr(值'url',无):
image\u url=value.url
文件名=str(值)
output.append(
u“%s”
u'

%s' %((当前:)、图像url、图像url、文件名、('Change:')) ) append(super(ClearableFileInput,self).render(name,value,attrs)) 返回标记_safe(u“”。连接(输出))
即使它对缩略图工作正常,
super(ClearableFileInput,self).render(name,value,attrs)
调用只添加了浏览按钮,但没有显示清除复选框,因此我无法删除选定的缩略图


这个代码怎么了?如何添加包含缩略图的复选框?

我解决了将
AdminImageWidget
重新编码的问题,如下所示:

from django.utils.safestring import mark_safe
from django.utils.html import escape, conditional_escape
from django.utils.encoding import force_unicode
from django.forms.widgets import ClearableFileInput, Input, CheckboxInput


class AdminImageWidget(ClearableFileInput):
    def render(self, name, value, attrs=None):
        substitutions = {
            'initial_text': self.initial_text,
            'input_text': self.input_text,
            'clear_template': '',
            'clear_checkbox_label': self.clear_checkbox_label,
        }
        template = '%(input)s'
        substitutions['input'] = Input.render(self, name, value, attrs)

        if value and hasattr(value, "url"):
            template = self.template_with_initial
            substitutions['initial'] = (
                '<img src="%s" alt="%s" style="max-width: 100px; max-height: 100px; border-radius: 5px;" /><br/>' % (
                    escape(value.url), escape(force_unicode(value))
                )
            )
            if not self.is_required:
                checkbox_name = self.clear_checkbox_name(name)
                checkbox_id = self.clear_checkbox_id(checkbox_name)
                substitutions['clear_checkbox_name'] = conditional_escape(checkbox_name)
                substitutions['clear_checkbox_id'] = conditional_escape(checkbox_id)
                substitutions['clear'] = CheckboxInput().render(checkbox_name, False, attrs={'id': checkbox_id})
                substitutions['clear_template'] = self.template_with_clear % substitutions

        return mark_safe(template % substitutions)
来自django.utils.safestring导入标记\u safe
从django.utils.html导入转义,条件转义
从django.utils.encoding导入强制\u unicode
从django.forms.widgets导入ClearableFileInput、Input、CheckboxInput
类AdminImageWidget(ClearableFileInput):
def render(自身、名称、值、属性=无):
替换={
“初始文本”:self.initial\u text,
“输入文本”:self.input\u text,
“清除模板”:“,
“清除复选框标签”:self.clear\u checkbox\u标签,
}
模板='%(输入)s'
替换['input']=input.render(self、name、value、attrs)
if值和hasattr(值,“url”):
template=self.template_,带_首字母
替换[“初始”]=(
“
”( 转义(value.url),转义(强制unicode(值)) ) ) 如果不需要self.u: 复选框名称=自身。清除复选框名称(名称) checkbox\u id=self.clear\u checkbox\u id(checkbox\u name) 替换['clear_checkbox_name']=条件转义(checkbox_name) 替换['clear\u checkbox\u id']=条件转义(checkbox\u id) 替换['clear']=CheckboxInput().render(复选框_name,False,attrs={'id':复选框_id}) 替换['clear_template']=self.template_与_clear%替换 返回安全标记(模板%替换)
注意:

substitutions['initial'] = (
    '<img src="%s" alt="%s" style="max-width: 100px; max-height: 100px; border-radius: 5px;" /><br/>' % (
        escape(value.url), escape(force_unicode(value))
    )
)
substitutions['initial']=(
“
”( 转义(value.url),转义(强制unicode(值)) ) )
这使得显示缩略图成为可能