在Django Admin

时间:2016-04-05 07:50:46

标签: django django-models django-admin django-views

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

之前我为django admin index,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)

正如我之前所说的那样,在changelist_view,index和add_view之前有效。但不适用于 delete_view change_view

1 个答案:

答案 0 :(得分:1)

根据您发布的代码,我不确定您delete_view无效的原因。我建议采用不同的方法将项目添加到上下文中。

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

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

如果您想在Django管理员之外的模板中使用这些变量,您可以写一个custom template tagcontext processor

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

{% getTablesModels as modelsTables %}

然后你可以在模板中使用变量

{% for item in modelsTables %}