在 Django 1.8 中覆盖现有的模板标记方法

Posted

技术标签:

【中文标题】在 Django 1.8 中覆盖现有的模板标记方法【英文标题】:Overwrite an Existing Template Tag method in Django 1.8 【发布时间】:2015-12-24 12:58:16 【问题描述】:

我正在尝试对 Django 管理中的更改列表进行一些 CSS 自定义。更具体地说,表结果。

我正在尝试向表格的tds 添加一些 CSS 和标记。

问题是那部分代码隐藏在模板标签内 (django/contrib/admin/templatetags/admin_list.py) 而不是模板本身 (/templates/admin/change_list_results.html)

我能够覆盖模板并进行一些更改,但我真的需要知道如何将模板标签“继承”到我的项目目录,而不是直接将更改应用到 Django 的模板标签目录。

我尝试遵循这些建议,但至少没有一个对我有用。

Extending Django Admin Templates - altering change list

我发现需要在admin_list.py 内部的items_for_result 方法内部进行更改。

问题是这是如何被覆盖的? items_for_result 是一个内部方法,它没有在标签库中注册,所以它不能从模板中调用。

那么:我如何覆盖它并告诉 Django 不要使用旧方法,而是使用我指定的方法?

【问题讨论】:

【参考方案1】:

这种改变恐怕不是那么容易做到的。要覆盖此方法,您需要修改 Django 源代码。不过不推荐。

如果只是 CSS/HTML 更改,您可以通过使用 javascript 添加样式来实现。有一种简单的方法可以通过创建自定义表单并将新的 JS 文件添加到 Meta 类来将自定义 JS 添加到管理员。

查看docs 和示例here。

【讨论】:

感谢 Coffee 先生,是的,我最近一直在使用表单并编写自己的小部件。这解决了我的问题,尽管在不覆盖源代码的情况下覆盖任何 Django 类或方法会很好。

以上是关于在 Django 1.8 中覆盖现有的模板标记方法的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.7 和 1.8 之间迁移行为的变化

javascript模板继承

覆盖现有的jQuery窗口刷新

覆盖管理模板时出现 TemplateSyntaxError

导入 django.contrib.auth.urls 不能很好地与现有的管理模板配合使用

在 Play 1.2.4 中覆盖现有的 CRUD 模块