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

Zar*_*doz 10 django django-allauth

我想覆盖外部应用程序的模板(allauth,安装在站点包中).不幸的是,我读过没有建议.我在笔记上添加了以下内容settings.py:

PROJECT_ROOT = os.path.normpath(os.path.dirname(os.path.abspath(__file__)))
TEMPLATE_DIRS = (os.path.join(PROJECT_ROOT, 'templates', 'allauth'))
Run Code Online (Sandbox Code Playgroud)

并将所有模板(此内容)复制到my_project_dir/templates/allauth.但是当我重新启动服务器并重新加载页面时,我只从站点包中的原始allauth应用程序获取渲染的模板,而不是我的自定义模板.任何提示?

Uly*_*s V 30

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

考虑到这一点,您只需在自定义应用程序中的相同路径下添加模板即可.


Dom*_*ger 9

我倾向于弄清楚发生了什么(DEBUG设置为True)的方法是让视图呈现一个不存在的模板,并查看Django尝试从中加载模板的位置列表(将包含在错误页面输出).

尝试渲染的视图有哪些模板?如果他们正在尝试渲染allauth/foo.html,那么你会想要添加my_project_dir/templates到你的TEMPLATE_DIRS设置,而不是my_project_dir/templates/allauth.