在Django管理员中为每个项目显示图标

时间:2013-08-28 15:27:27

标签: python django django-templates django-admin

我想在管理员索引页面上为每个模型添加指定的图标。我在每个模型上添加了一个名为“picture”的属性,然后我修改了/contrib/admin/sites.py将该图片名称传递给模板并检查并在admin的index.html模板上使用它来获取结果。 我想知道是否有更好的方式

class Product(models.Model):
    abbr = models.CharField(max_length=20,unique=True)
    title = models.CharField(max_length=200,unique=True)
    owner = models.ForeignKey(UserProxy)
    des = models.TextField(blank=True,null=True)
    picture =  'product.png'    
    def __unicode__(self):
        return self.abbr
    class Meta:
        none

2 个答案:

答案 0 :(得分:4)

您所做的似乎没问题,只有一些小技巧可以让您的代码更好一点:

  1. 而不是修改django/contrib/admin/sites.py您可以继承AdminSite类(如果您还没有这样做)。
  2. 修改AdminSite.index()方法以传递不是图片,但修改整个管理类(model_admin方法中有一个index()变量)。
  3. 在ModelAdmin类中分配图片,而不是模型,将管理内容与模型分开。

答案 1 :(得分:0)

'Python Fanboy'的回答非常简短但对我有用,我可以避免修改django基类

  1. 图片字段已移至管理类
  2. 我将AdminSite子类化为CustomAdminSite并复制了index和app_index并进行了修改 (我不知道是否有比复制整个索引和覆盖的app_index更好的方法)
  3. 在urls.py中,“admin.sites.url”替换为“custom_site.url” (custom_siteCustomAdminSite
  4. 的实例
  5. 我不想要其他网址而不是“/admin”,例如“/my_admin”所以我必须为我的所有模型使用CustomAdminSite的实例,即使是User,Group&站点
  6. 我正在使用admin_tools,现在我丢失了应用程序菜单
  7. 我遇到的新问题有更好的想法或解决方案吗?