向 Django Admin 中的每个视图(base_site.html)添加内容

Eli*_* MP 2 django django-models django-admin django-views

我想将对象列表传递给我在 Djando admin、delete_viewchange_view 中的自定义模板。我修改了 base_site.html 以包含导航栏,并且我想从视图中将对象列表传递给导航栏。

我之前也为 django 管理索引、changelist_view 和 add_view 做过。我覆盖了这些功能并添加了我想要的额外内容。

但我不能在两个第一次这样做。这个想法应该是这样的:

@csrf_protect_m
@transaction.atomic
def delete_view(self, request, object_id, extra_context=None):
    extra_context = extra_context or {}                 
    mygetModels = getModels()
    extra_context["modelsTables"] = mygetModels.getTablesModels()
    return super(table_NameAdmin, self).delete_view(request, object_id, extra_context)
Run Code Online (Sandbox Code Playgroud)

正如我之前所说,这在 changelist_view、index 和 add_view 中有效。但在delete_viewchange_view 中不起作用

Ala*_*air 6

从您发布的代码来看,我不确定您为什么delete_view不起作用。我建议采用不同的方法将项目添加到上下文中。

尝试覆盖您的管理站点的each_context方法。这避免了必须覆盖多个模型管理方法。

def each_context(self, request):
    context = super(MyAdminSite, self).each_context(request)
    context['extra_var'] = 'Extra variable'
    return context
Run Code Online (Sandbox Code Playgroud)

如果您想在 Django 管理员之外的模板中使用这些变量,您可以编写自定义模板标记上下文处理器

如果您使用的是 Django 1.9+,您可以使用simple_tag装饰器将标签的结果保存到一个变量中。

{% getTablesModels as modelsTables %}
Run Code Online (Sandbox Code Playgroud)

然后就可以使用模板中的变量了

{% for item in modelsTables %}
Run Code Online (Sandbox Code Playgroud)