在django admin中添加自定义按钮或标签

0 投票
4 回答
1604 浏览
提问于 2025-04-16 19:32

我想在Django的管理页面上添加一些HTML元素,比如按钮或者链接("a"标签)。请问我该怎么做?求帮助。

4 个回答

0

我使用了上面Omokoli的解决方案,但为了让这个字段使用我自定义的控件,我做了以下操作:

class MyModelAdminForm(forms.ModelForm):
    class Meta:
        model = get_model('myapp', 'mymodel')
        widgets = {
            'original_link': OutputWidget,
        }
1

我不太确定你想把你的东西加在哪里,但我在其他地方找到了一种解决方案,可以改变文件字段的HTML(在我的例子中,我想显示当前的图片在一个图片字段里)。

换句话说,你可以制作一个小工具,来修改你想要自定义的字段的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)

这段代码需要放在admin.py文件里,在那里你会注册你的模型。

撰写回答