【问题标题】:Adding content to each view(base_site.html) in Django Admin在 Django Admin 中向每个视图(base_site.html)添加内容
【发布时间】:2016-07-25 00:45:35
【问题描述】:

我想将对象列表传递给我在 Djando 管理中的自定义模板,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)

正如我之前所说,这在 changelist_view、index 和 add_view 中有效。但在 delete_viewchange_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


    【解决方案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 %}
    

    【讨论】:

    • 这就是我想要的。你又做了一次,阿拉斯代尔……;)。谢谢伙计。
    • 写这个each_context()覆盖函数的好地方是什么?
    • @NitinNain 这取决于你。示例in the docs 将自定义站点放入my project/admin.py(在settings.py 旁边)。
    • @NitinNain,我会使用 /sites.py,因为这是它最初定义的地方 (admin/sites.py)
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签