【问题标题】:Change django admin template for a calendar更改日历的 django 管理模板
【发布时间】:2016-12-09 12:16:57
【问题描述】:

我有一些模特,其中一个是关于健身课程的,

class Gym_Class(models.Model):
    name = models.CharField(max_length=200)
    icon = models.ImageField()
    instructor = models.ForeignKey(Instructor, related_name="instructor")
    program = models.ForeignKey(Program)
    short_review = models.TextField()
    long_review = models.TextField()
    date = models.DateField(default=datetime.now)
    def __unicode__(self):
            return self.name

我想知道是否可以覆盖管理员 (localhost:8000/admin/gym_class/) 中的列表模板,以基于每个实例的日期字段以日历格式显示会话仅适用于此模型,其他我希望以常规列表格式查看它们。整个想法是,当有人想要编辑有关 gym_class 实例的一些信息时,他们将看到一个日历,而不是在一个大列表中搜索课程。

【问题讨论】:

  • Gym_Class > GymClass
  • From the docs 当多个应用程序提供同一资源(模板、静态文件、管理命令、翻译)的不同版本时,INSTALLED_APPS 中最先列出的应用程序优先。
  • 因此您只需将 django change_list.html 模板放入 project/app/templates/app/admin/gymclass/change_list.html 即可

标签: python django calendar django-templates django-admin


【解决方案1】:

您可以通过overriding the admin templates更改django admin的显示。

您特别希望覆盖的模板名为change_list.html。这个文件可以在 django 的包目录中找到,路径为:

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

您可以将 django 模板从其本地 python 包目录或download it from django's Github repository 复制到应用程序的模板目录之一,并将其​​放置在

<template-path>/admin/gym_class/change_list.html

<template-path> 是您在项目中放置模板的任何位置

使用模板,您可以根据需要对其进行自定义,而无需修改其他应用的更改列表布局。

【讨论】:

    【解决方案2】:

    管理模板文件位于 contrib/admin/templates/admin 目录中。

    为了覆盖 Gym_Class,请在项目的模板目录中创建一个管理目录。在 admin 目录中,创建名为 [your app name] 的子目录。在这个目录中创建一个名为 Gym_Class 的目录。

    接下来将 contrib/admin/templates/admin/change_list.html 复制到您刚刚创建的目录中。

    现在开始像普通 HTML 一样编辑文件,设置日历和其他您想做的事情。

    docss

    【讨论】:

    • 谢谢,解决了,对日历方法有什么建议吗?我有点担心gym_class'es的列表和分页,因为我正在考虑一个日历视图,你应该拥有所有项目,而不仅仅是一页。