Django - 管理员 - 如何为模型代理重写change_list模板?

4 投票
2 回答
18381 浏览
提问于 2025-04-16 14:44

我做了一个简单的Django应用程序。我有一个模型叫“Visitor”(访客)。我的目标是在Django的管理后台显示两个表格:一个是所有访客的列表,另一个是今天的访客列表。

我按照这些说明,用下面的代码把一切都搞定了。但是我不太确定怎么单独为VisitorExpectedTodayProxy这个模型覆盖change_list.html。

我尝试按照这里的说明,创建了Site/templates/admin/VisitorLog/VisitorExpectedTodayProxy/change_list.html,并在里面做了修改,但似乎没有生效。

Models.py

class Visitor(models.Model):
    visit_datetime = models.DateTimeField(null=True)
    visitor_name = models.CharField(max_length=500)

#Make dummy models for different object views in admin interface
class VisitorExpectedTodayProxy(Visitor):
    class Meta:
        proxy=True
        verbose_name = "Visitor"
        verbose_name_plural = "Today's Visitors and Regular Visitors"

2 个回答

7

在把你的路径都变成小写之后,应该看起来像这样:

templates/admin/visitorlog/visitorexpectedtodayproxy/change_list.html

你的change_list.html文件的内容应该基于默认的admin/change_list进行扩展:

{% extends "admin/change_list.html" %}

你可以通过查看Django源代码中的各种区块模板,来定制这个页面的不同部分:

django/contrib/admin/templates/admin/change_list.html
5

试着把你的文件夹名字都改成小写。

注意,管理应用会在查找目录时把模型名称变成小写,所以如果你打算在区分大小写的文件系统上运行你的应用,确保你的目录名称全部使用小写字母。

另外,你有没有检查过你的模板目录是否正常工作?TEMPLATE_DIRS 需要包含你的模板文件夹,并且要确保 filesystem 模板加载器在 app_directories 加载器之前。

最后,你可以通过 ModelAdmin 属性来指定一个模板: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.change_list_template

撰写回答