在Django中覆盖外部应用程序的模板

12

我希望能够覆盖外部应用程序(allauth,安装在网站包中)的模板。不幸的是,我读到的所有建议都没有起作用。

我将以下内容添加到我的settings.py文件中:

PROJECT_ROOT = os.path.normpath(os.path.dirname(os.path.abspath(__file__)))
TEMPLATE_DIRS = (os.path.join(PROJECT_ROOT, 'templates', 'allauth'))

我将所有模板 (此内容) 复制到 my_project_dir/templates/allauth 目录下。但是当我重启服务器并重新加载页面时,我只能获取来自原始allauth应用程序的呈现模板,而不是我的自定义模板。有什么提示吗?

2个回答

36

检查INSTALLED_APPS的顺序,第一个匹配的模板将被渲染。

有了这个想法,您可以在自定义应用程序下添加相同路径的模板。


9
我通常在启用DEBUG模式时,通过让视图渲染一个不存在的模板,查看Django尝试从哪些位置加载模板的列表(这些信息会包含在错误页面输出中),以此来了解发生了什么。

视图要渲染哪些模板?如果它们试图渲染allauth/foo.html,则需要将my_project_dir/templates添加到您的TEMPLATE_DIRS设置中,而不是my_project_dir/templates/allauth


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接