在Django Admin中向每个视图(base_site.html)添加内容
我想在Djando admin、删除视图和更改视图中将对象列表传递给我的自定义模板。我修改了base_site.html以包含导航栏,我想从视图中将对象列表传递给导航栏 我以前也为django管理索引、变更列表视图和添加视图做过这项工作。我重写这些函数并添加我想要的额外内容 但我不能在两个月内做到这一点。这个想法应该是这样的:在Django Admin中向每个视图(base_site.html)添加内容,django,django-models,django-admin,django-views,Django,Django Models,Django Admin,Django Views,我想在Djando admin、删除视图和更改视图中将对象列表传递给我的自定义模板。我修改了base_site.html以包含导航栏,我想从视图中将对象列表传递给导航栏 我以前也为django管理索引、变更列表视图和添加视图做过这项工作。我重写这些函数并添加我想要的额外内容 但我不能在两个月内做到这一点。这个想法应该是这样的: @csrf_protect_m @transaction.atomic def delete_view(self, request, object_id, extra_c
@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\u视图、index和add\u视图中,这是有效的。但是在删除视图和更改视图中,您发布的代码不起作用,我不确定您的
删除视图
为什么不起作用。我建议使用不同的方法向上下文中添加项目
尝试覆盖管理站点的方法。这避免了必须重写多个模型管理方法
def each_context(self, request):
context = super(MyAdminSite, self).each_context(request)
context['extra_var'] = 'Extra variable'
return context
如果您想在Django admin之外的模板中使用这些变量,可以编写一个or
如果您使用的是Django 1.9+,则可以使用simple_标记
decorator
将标记的结果保存到变量
{% getTablesModels as modelsTables %}
然后可以使用模板中的变量
{% for item in modelsTables %}
试着写一个,并将其包含在你的管理模板中。这样,您就不必为了向模板上下文中添加某些项而覆盖每个管理视图。。。看起来好多了。因此,我将我的函数定义为:@register.simple_tag def getTablesModels(self):Classes=apps.apps.get_models(ddbb)modelsclasses=[]对于xrange中的I(len(Classes)):obj=dbModels(Classes[I]。\uu name\uuuuu.lower(),Classes[I]。\u meta.db_table)modelses+=[obj]返回modelClasses我如何在索引管理模板上调用它?我应该进口什么吗?我需要检查这个标签返回的所有列表{%for modelsTables%}
each_context()
override函数的好地方是什么?@nitinain由你决定。该示例将自定义站点放在myproject/admin.py
(在settings.py
旁边)中。@NitinNain,我会使用/sites.py,因为这是它最初定义的位置(admin/sites.py)