Python 向django admin添加自定义按钮或标记

Python 向django admin添加自定义按钮或标记,python,django-admin,Python,Django Admin,我想向django管理页面添加一些html元素(按钮、“a”标记等)。我怎么做?请帮助。来自文档: 不确定要将内容添加到何处,但这是我在其他地方找到的一个解决方案,用于更改文件字段的HTML(在我的示例中,我希望在ImageField中显示当前图像) 换句话说,您可以制作一个小部件,用于修改要自定义的字段的html: # Widget that modifies the output of a FileField class OutputWidget(AdminFileWidget):

我想向django管理页面添加一些html元素(按钮、“a”标记等)。我怎么做?请帮助。

来自文档:


不确定要将内容添加到何处,但这是我在其他地方找到的一个解决方案,用于更改文件字段的HTML(在我的示例中,我希望在ImageField中显示当前图像)

换句话说,您可以制作一个小部件,用于修改要自定义的字段的html:

# Widget that modifies the output of a FileField
class OutputWidget(AdminFileWidget):
    # Overloaded django magic
    def render(self, name, value, attrs=None):
        output = []
        # This is the place where we edit the output    
        if value and getattr(value, "url", None):
            image_url = value.url
            output.append(u' <a href="%s" target="_blank"><img src="%s" alt="%s" /></a>' % (image_url, image_url, image_url))
        output.append(super(AdminFileWidget, self).render(name, value, attrs))
        return mark_safe(u''.join(output))

# ModelAdmin class that is applied to the model
class MyModelSettings(admin.ModelAdmin):
    # Overloaded django magic
    def formfield_for_dbfield(self, db_field, **kwargs):
        # Look for the field we want to edit and register the widget with it
        if db_field.name == 'nameOfFieldIWantToEdit':
            request = kwargs.pop("request", None)
            kwargs['widget'] = OutputWidget
            return db_field.formfield(**kwargs)
        return super(MyModelSettings,self).formfield_for_dbfield(db_field, **kwargs)

# Register my overloaded settings with the model
admin.site.register(MyModel, MyModelSettings)
修改文件字段输出的小部件 类OutputWidget(AdminFileWidget): #加戈魔法 def render(自身、名称、值、属性=无): 输出=[] #这是我们编辑输出的地方 如果值和getattr(值,“url”,无): image\u url=value.url output.append(u'%(图像\ url、图像\ url、图像\ url)) append(super(AdminFileWidget,self).render(名称、值、属性)) 返回标记_safe(u“”。连接(输出)) #应用于模型的ModelAdmin类 类MyModelSettings(admin.ModelAdmin): #加戈魔法 def formfield_for_dbfield(self,db_字段,**kwargs): #查找我们要编辑的字段并向其注册小部件 如果db_field.name=='nameOfFieldIWantToEdit': request=kwargs.pop(“请求”,无) kwargs['widget']=OutputWidget 返回db_field.formfield(**kwargs) 返回super(MyModelSettings,self).formfield_for_dbfield(db_field,**kwargs) #向模型注册重载设置 admin.site.register(MyModel、MyModelSettings)
代码进入admin.py,您可以在其中注册模型。

我从上面使用了Omokoli的解决方案,但为了让字段使用我的自定义小部件,我做了:

class MyModelAdminForm(forms.ModelForm): class Meta: model = get_model('myapp', 'mymodel') widgets = { 'original_link': OutputWidget, } 类MyModelAdminForm(forms.ModelForm): 类元: model=get_model('myapp','mymodel') 小部件={ “原始链接”:OutputWidget, }