Alter Django管理员更改列表标题文本

Jen*_*n Z 8 django django-admin

我正在为使用标准更改列表作为临时阶段的Django管理界面创建一些自定义视图.除了更改列表页面H1是"选择要更改的对象"之外,这样工作正常."更改"不是用户在我的自定义视图中执行操作的正确动词.

我找到了控制更改列表页面(change_list.htmlchange_list_results.html)布局的django.contrib.admin模板,但我无法找到标题的提供位置.我猜它是一个视图在某个地方传入的变量?

如何用不那么误导的东西覆盖这个文本,例如"选择对象"而不是"选择要更改的对象"?我可以在所有更改列表视图中更改它,而不仅仅是我正在尝试自定义的特定视图; 但我更喜欢一个覆盖的解决方案,而不是修改django.contrib.admin代码,如果可能的话.

更新:我发现视图负责更改列表,它main.pydjango\contrib\admin\views.变量self.title在第69行(Django 1.0).我通过编辑这一行来实现我正在寻找的结果

self.title = (self.is_popup and ugettext('Select %s') % force_unicode(self.opts.verbose_name) or ugettext('Select %s to change') % force_unicode(self.opts.verbose_name))
Run Code Online (Sandbox Code Playgroud)

阅读

self.title = (self.is_popup and ugettext('Select %s') % force_unicode(self.opts.verbose_name) or ugettext('Select %s') % force_unicode(self.opts.verbose_name))
Run Code Online (Sandbox Code Playgroud)

我仍然真的很想听到更好的方法来实现相同的结果,而不涉及黑客攻击django.contrib.admin代码 - 它看起来已经有了一个选项,让我的标题符合我喜欢的方式,但我不确定如何触发它?

jar*_*ssi 17

不知道是否仍然相关,但另一种方式来做到这一点会被传递extra_contentchangelist_view方法.例如:

from django.contrib import admin

class MyCustomAdmin(admin.ModelAdmin):

    def changelist_view(self, request, extra_context=None):
        extra_context = {'title': 'Change this for a custom title.'}
        return super(MyCustomAdmin, self).changelist_view(request, extra_context=extra_context)
Run Code Online (Sandbox Code Playgroud)


Jos*_*ley 5

对于当前版本的 Django:

class CustomChangeList(django.contrib.admin.views.main.ChangeList):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.title = 'My Cool Title'

class MyAdmin(ModelAdmin):
    def get_changelist(self, request, **kwargs):
        return CustomChangeList
Run Code Online (Sandbox Code Playgroud)


zgo*_*oda 1

已经有ChangeList定制票:http://code.djangoproject.com/ticket/9749。这将提供更改管理应用程序的许多其他方面的能力。不幸的是,没有干净的方法来实现您的目标。