【问题标题】:How to add css class to Django admin form如何将 css 类添加到 Django 管理表单
【发布时间】:2018-03-16 18:41:02
【问题描述】:

我想知道是否可以在 Django 管理表单中添加一个 css 类?

例如:

@admin.register(SomeFunction)
class SomeFunctionAdmin(SortableAdmin):
    fieldsets = (
        (None, {
            'fields': ('item1', 'item2', 'item3'),
        }),
    )

    def get_form(self, request, obj=None, **kwargs):
        form = super(SomeFunctionAdmin, self).get_form(request, obj, **kwargs)
        return form

    class Media:
        js = (
            'custom.js',
        )

现在我想给SomeFunctionAdmin添加一个css类,假设我想添加.custom-form-admin类。在我的 custom.js 文件中,我有一些函数可以搜索这个自定义 css 类。

如何以编程方式将自定义 css 类添加到 SomeFunctionAdmin

我想象代码看起来像这样:

@admin.register(SomeFunction)
class SomeFunctionAdmin(SortableAdmin):
    fieldsets = (
        (None, {
            'fields': ('item1', 'item2', 'item3'),
        }),
    )

    def get_form(self, request, obj=None, **kwargs):
        form = super(SomeFunctionAdmin, self).get_form(request, obj, **kwargs)
        form.set_css += 'custom-form-admin'
        return form

    class Media:
        js = (
            'custom.js',
        )

【问题讨论】:

    标签: css django django-admin


    【解决方案1】:

    您可以覆盖render_change_form()并修改内容:

    from django.http import HttpResponse
    
    
    @admin.register(SomeFunction)
    class SomeFunctionAdmin(SortableAdmin):
        fieldsets = (
            (None, {
                'fields': ('item1', 'item2', 'item3'),
            }),
        )
    
        def render_change_form(self, *args, **kwargs):
            content = super(SomeFunctionAdmin, self).render_change_form(*args, **kwargs).render().content
            return HttpResponse(content.replace('<form', '<form class="custom-form-admin"'))
    
        class Media:
            js = (
                'custom.js',
            )
    

    【讨论】:

    • 感谢您的回答。我不断收到此错误Exception Value: super(type, obj): obj must be an instance or subtype of type
    • 修复了上述问题,现在看来我需要返回以下内容:Exception Value: expected bytes, bytearray or buffer compatible object return HttpResponse(content.replace('&lt;form', '&lt;form class="custom-form-admin"'))
    • return HttpResponse(content.replace(b'&lt;form', b'&lt;form class="custom-form-admin"')) 如果您使用的是 Python 3
    • 谢谢。虽然我不太喜欢替换表格,但它确实有效。我希望有一些方法可以添加自定义 css 类。
    猜你喜欢
    • 2017-04-12
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 2016-01-09
    • 2011-12-29
    • 2014-08-05
    相关资源
    最近更新 更多