【发布时间】:2016-07-25 00:45:35
【问题描述】:
我想将对象列表传递给我在 Djando 管理中的自定义模板,delete_view 和 change_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)
正如我之前所说,这在 changelist_view、index 和 add_view 中有效。但在 delete_view 和 change_view 中不起作用。
【问题讨论】:
-
尝试写一个custom template tag,并将其包含在您的管理模板中。这样,您不必仅仅为了向模板上下文添加一些项目而覆盖每个管理视图。
-
嗯...看起来确实更好。所以我将我的函数定义为:@register.simple_tag def getTablesModels(self): Classes = apps.apps.get_models(ddbb) modelClasses = [] for i in xrange(len(Classes)): obj = dbModels(Classes[i] .__name__.lower(), Classes[i]._meta.db_table) modelClasses += [obj] return modelClasses 我如何在我的索引管理模板上调用它?我应该进口一些东西吗?我需要查看此标签返回的所有列表 {% for item in modelsTables %}
- a href="/admin/db/{{ item.linkDb }}/">{{ item.nameDb }}
{% endfor %} -
请不要在 cmets 中发布代码,无法阅读。
-
哈哈哈……哈哈。你的权利。我的错......无论如何,你的第二种方法更好。更清洁、更智能……感谢 Alasdair。
标签: django django-models django-admin django-views