覆盖django管理员登录页面并将变量传递给模板

时间:2015-03-09 10:35:43

标签: python django django-admin

我是新手使用python和django。 我想覆盖django管理员登陆页面。所以我可以在templates / admin /文件夹中创建模板base_site.html和index.html。

现在,我可以在index.html中的/ admin(django admin landing)页面上显示静态内容。 我搜索了很多但没有得到,我怎样才能将参数或变量传递给index.html文件。

1 个答案:

答案 0 :(得分:3)

一种方法是编写一个自定义模板标记,它将从数据库中获取数据并根据需要呈现输出。

https://docs.djangoproject.com/en/1.7/howto/custom-template-tags/#writing-custom-template-tags

潜在的缺点是每次请求Django-admin索引页时都会运行数据库查询。

更好的方法是创建一个视图,返回您需要显示为JSON的数据。

您的视图将如下所示,您可以从MyModel获取统计信息。

from django.http import HttpResponse
import json

def get_statisics(request):
    j = MyModel.objects.values('field_a', 'field_b')
    return HttpResponse(json.dumps(j), content_type='application/json')

您需要在覆盖的模板中添加占位符div或任何HTML元素,并编写一些从您的视图中获取数据的JavaScript(通过AJAX)并将其添加到模板中。

(function($) {
  $(document).ready(function() {
    $.ajax({
      url: '/stats/',  // url to the `get_statistics` view
      dataType: 'json'
    }).done(function(data) {
      // read `data` and put it in your template
      $('#placeholder-div').text(data);
    });
  });
}(django.jQuery));

上面的示例将按原样在占位符元素中显示您的JSON,但您可以使用数据执行任何操作。渲染表格/图表/图表。

然后,您可以缓存get_statistics视图,以避免每次对其进行AJAX调用时都运行数据库查询。