更改Django管理后台列表标题文本
我正在为Django的管理界面创建一些自定义视图,使用标准的更改列表作为过渡阶段。这一切都运行得很好,除了更改列表页面的标题是“选择要更改的对象”。在我的自定义视图中,“更改”这个词并不适合用户要进行的操作。
我找到了控制更改列表页面布局的Django模板(change_list.html
和change_list_results.html
),但我找不到标题是从哪里来的。我猜这个标题是某个视图传递过来的变量?
我该如何把这个标题改成更准确的,比如“选择对象”而不是“选择要更改的对象”?我希望这个修改能在所有更改列表视图中生效,而不仅仅是我想自定义的那些;不过如果能找到一种覆盖的方法,而不是直接修改django.contrib.admin的代码,那就更好了。
更新:我找到了负责更改列表的视图,它在django\contrib\admin\views
中的main.py
。在第69行有一个变量self.title
(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))
把它改成
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))
我还是很想知道有没有更好的方法来实现同样的效果,而不需要修改django.contrib.admin的代码——看起来已经有一个选项可以让我想要的标题,但我不确定该怎么触发它?
6 个回答
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
36
不确定这个方法现在是否还适用,但还有一种做法是把 extra_content
传递给 changelist_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)
1
已经有一个关于ChangeList
自定义的提案:http://code.djangoproject.com/ticket/9749。这个提案将允许你修改管理应用的许多其他方面。不过,很遗憾,目前没有简单的方法来实现你的目标。