在 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 自定义。更具体地说,表结果。
我正在尝试向表格的td
s 添加一些 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 中覆盖现有的模板标记方法的主要内容,如果未能解决你的问题,请参考以下文章