Django Administration的观点在哪里?

时间:2015-08-19 20:09:18

标签: python django django-templates django-admin

我正在尝试修改原始的Django管理模板。我成功地设法添加了自定义内容。但是,只有当我的数据库中的表为空时,才需要显示此内容。因此,我想通过视图将一些内容传递给模板,但我找不到它。

更具体地说,我的扩展管理模板如下所示:

{% overextends "admin/index.html" %}
{% load i18n admin_urls %}

{% block content  %}
     {{ block.super }}

     {% if is_empty %}
         <a href="#">This hyperlink appears only when the table is empty</a>
     {% endif %}

{% endblock %}

我想将模板传递给变量is_empty,无论是True还是False,具体取决于表是否为空。

任何想法如何做到这一点?

非常感谢!

1 个答案:

答案 0 :(得分:2)

创建一个template context processor来计算is_empty的值。

# in my_app/context_processors.py
from my_app.models import MyTable

def is_empty(request):
    """Returns a bool depending on whether MyTable is empty"""
    return {'is_empty': not MyTable.objects.exists()} 

将您的上下文处理器添加到模板设置中(请注意,对于Django&lt; 1.8,此步骤略有不同)。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        ...
        'OPTIONS': {
            'context_processors': [
                ...
                'my_app.context_processors.is_empty',
            ],
        },
    },
]

然后,您可以在使用请求上下文呈现的任何模板中包含{{ is_empty }}。这包括管理员视图,基于通用类的视图以及使用render快捷方式的视图。