Django无法找到自定义密码重置模板问题求助
先帮你梳理下问题:你在自定义密码重置确认视图时遇到了模板找不到的错误,尝试配置TEMPLATES后没解决,同时用django-admin命令时也遇到了环境变量的问题。下面一步步来解决:
1. 修复TEMPLATES配置的低级错误
看你贴的TEMPLATES配置,DIRS里写了[os.path.join(BASE_DIR, 'templates')]——这是嵌套列表了!Django要求DIRS是字符串路径的列表,你这里把单个路径又套了一层列表,会导致Django无法正确解析项目根目录的templates文件夹(如果有的话)。正确的配置应该是:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], # 去掉内层的[] 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.contrib.auth.context_processors.auth', 'django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.contrib.messages.context_processors.messages', ], }, }, ]
2. 确认模板路径是否匹配
你的账号应用名叫accounts,视图里指定的模板路径是accounts/registration/password_reset_confirm.html,那模板文件的位置必须对应:
accounts/ ├── templates/ │ └── accounts/ # 必须多这一层,对应应用名 │ └── registration/ │ └── password_reset_confirm.html
因为当APP_DIRS=True时,Django会自动去每个已安装应用的templates目录下查找应用名/xxx.html格式的模板。如果你的模板现在是放在accounts/templates/registration/下,那你需要把视图里的template_name改成registration/password_reset_confirm.html,或者给registration文件夹套一层accounts目录,二选一都可以。
3. 别忘了把accounts加入INSTALLED_APPS
检查你的settings.py里的INSTALLED_APPS列表,必须包含'accounts',否则Django不会去这个应用的templates目录里找模板。
4. 解决django-admin的环境变量问题
用django-admin命令时,必须指定项目的settings模块,你可以这样做:
- Mac/Linux终端:
临时设置环境变量再执行命令:
或者一次性执行:export DJANGO_SETTINGS_MODULE=myproject.settings django-admin <你的命令>DJANGO_SETTINGS_MODULE=myproject.settings django-admin <你的命令> - Windows(PowerShell):
另外更简单的方法是用$env:DJANGO_SETTINGS_MODULE="myproject.settings" django-admin <你的命令>python -m django代替django-admin,它会自动识别当前目录下的manage.py对应的settings:python -m django <你的命令>
最后验证
做完上面的调整后,重启Django开发服务器,再访问密码重置链接试试,应该就能找到模板了。
内容的提问来源于stack exchange,提问作者J. Hesters

