你如何覆盖Django的管理员app_index?

时间:2017-01-20 18:58:35

标签: django django-admin

我非常熟悉如何覆盖Django的admin templates ,但是我无法找到有关如何正确覆盖所述模板可用上下文的任何说明。例如这个页面:

/admin/users/

可以通过以下位置创建文件来覆盖此页面的样式:

root/users/templates/admin/users/app_index.html

但是如果我想在加载模板之前再做一些Python级别的东西怎么办?特别是在我的情况下,我想为/admin/users/生成一种仪表板,为此,我需要运行一个相当精细的查询。

现在我知道我可以通过创建一个为我执行查询的模板标记来解决这个问题,但坦率地说,当你从模板中搜索数据库时,这很脏,所以我想更好地做到这一点 如果存在这种方式。

但是,如果你能够充满信心地(且令人信服地)说明如果不重写django.contrib.admin.sites.AdminSite.app_index就无法做到这一点,那么我会将你的答案标记为正确并与我丑陋的黑客一起去。

1 个答案:

答案 0 :(得分:2)

可以完成,无需重写Scanner in = null; int greater = 1; int lesser = 1; int a = 1; int b = 1; int originalA = 0; int originalB = 0; try { in = new Scanner(new File(("C:\\Users\\####\\Desktop\\####\\Eclipse\\#######\\#######2\\src\\Prog280a.dat"))); } catch (FileNotFoundException e) { System.out.println("File is not found try again."); System.exit(0); } while (in.hasNextInt()) { if (a != 0) { greater = in.nextInt(); lesser = in.nextInt(); if (greater > lesser) {a = greater; b = lesser;} else {b = greater; a = lesser;} originalA = a; originalB = b; a = a - b; } System.out.println("The GCD of " + originalA + " & " + originalB + " is " + b); a = 1; b = 1; } 。由于app_index旨在通过子类化进行自定义。

查看AdminSite实施,您可以看到AdminSite有一个关键字参数app_index。您可以将此用于您的目的,以避免重写如下

extra_context

然后出现问题,您需要实例化自定义网站并使用它来设置您的网址并注册模型管理员。如果Alasdair建议这样做不方便,您可以考虑this

所有这一切,无论如何,您仍然会在请求中点击数据库,类似于您对标记的关注。只有缓存才能解决这个问题。