python - 尝试访问 Django 2.2 中的登录 url 时,位于 /en/user/login/ 的 TemplateDoesNotExist
问题描述
我正在将 Django 应用程序从 1.11 升级到 2.2。我已经完成了所有的迁移和一切,但我一直面临这个错误django.template.exceptions.TemplateDoesNotExist: registration/login.html
。如果我错过了一些愚蠢简单的东西,我目前仍在学习 Django 道歉。我已在此处附上错误消息图片以及可能与此错误消息相关的文件。只是为了澄清我settings.py
在模板下有以下内容:
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",
"django.template.context_processors.request",
]
}
}
]
以下是可能有助于调试的其他文件:
网址.py
from django.conf.urls import url, include
from django.urls import reverse_lazy
from userApp import views
from django.contrib.auth import views as django_contrib_auth_views
from django.contrib.auth.views import LoginView
urlpatterns = [
url(r'^register/$', views.register, name='register'),
url(r'^profile/$', views.profile, name='profile'),
url(r'^login/$', views.rate_limit_login, name='login'),
url(r'^rate_limited/$', views.rate_limited, name='rate_limited'),
url(r'^logout/$', django_contrib_auth_views.LogoutView, {'template_name': 'userApp/logged_out.html', 'next_page': '/'}, name='logout'),
url(r'^password_change/$', django_contrib_auth_views.PasswordChangeView, {'template_name': 'userApp/password_change_form.html', 'post_change_redirect': reverse_lazy('userApp:password_change_done')}, name='password_change'),
url(r'^password_change/done/$', django_contrib_auth_views.PasswordChangeDoneView, {'template_name': 'userApp/password_change_done.html'}, name='password_change_done'),
url(r'^password_reset/$', django_contrib_auth_views.PasswordResetView, {'template_name': 'userApp/password_reset_form.html', 'email_template_name': 'userApp/password_reset_email.html', 'post_reset_redirect': reverse_lazy('userApp:password_reset_done')}, name='password_reset'),
url(r'^password_reset/done/$', django_contrib_auth_views.PasswordResetDoneView, {'template_name': 'userApp/password_reset_done.html'}, name='password_reset_done'),
url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', django_contrib_auth_views.PasswordResetConfirmView, { 'template_name': 'userApp/password_reset_confirm.html', 'post_reset_redirect': reverse_lazy('userApp:password_reset_complete')}, name='password_reset_confirm'),
url(r'^reset/done/$', django_contrib_auth_views.PasswordResetCompleteView, {'template_name': 'userApp/password_reset_complete.html'}, name='password_reset_complete'),
视图.py
from django.utils.translation import ugettext as _
from django.http import HttpResponse
from django.shortcuts import render, redirect, get_object_or_404
from django.urls import reverse
from django.contrib import messages
from django.conf import settings
from django.contrib.auth import authenticate, login
from django.contrib.auth.views import LoginView
from django.contrib.auth.decorators import login_required
from ratelimit.decorators import ratelimit
from django.forms.utils import ErrorList
from .forms import MyUserCreationForm, UserProfileForm
from .utils import ReCaptcha
from django.contrib.auth import get_user_model
User = get_user_model()
from django.views.decorators.clickjacking import xframe_options_exempt
import logging
logger = logging.getLogger(__name__)
@ratelimit(key='post:username', rate='10/5m')
@ratelimit(key='post:password', rate='10/5m')
@xframe_options_exempt
def rate_limit_login(request):
if request.user.is_authenticated:
return redirect(request.GET.get('next', reverse('mapApp:index')))
if request.limited:
return redirect(reverse('userApp:rate_limited'))
print('Hits')
return LoginView.as_view()(request, template_name='userApp/login.html')
def rate_limited(request):
return render(request, 'userApp/rate_limited.html')
我尝试在 stackoverflow 上对此进行修复,因为这对很多人来说似乎是一个非常普遍的问题,但解决方案对我不起作用。由于某种原因,找不到 login.html 文件。我可以看到存在但不确定为什么找不到它。
解决方案
您应该将 传递template_name
给登录视图的构造函数,因此:
return LoginView.as_view(template_name='userApp/login.html')(request)
推荐阅读
- html - Python BeautifulSoup - 试图在多个 div 中获取没有任何类的跨度值
- python - 蛇与 Python 和 Pygame
- c++ - 为什么我的 arduino 按钮在 0 和 1 以外的端口上不起作用?
- python-3.x - 处理窗口弹出硒
- flutter - 如何正确地将值传递给 Flutter 中任何小部件的事件处理函数?
- python - 如何匹配某个单词后的所有内容
- ssl - Nginx certbot:手动设置 pem 文件以在 https 上服务子域和主域
- google-sheets - 按 C 列排序,但将 F 列中的值分组
- javascript - 如何根据其他数组的值过滤对象数组?
- asp.net - asp.net mvc 发布了如何将文件保存在 iss 服务器中以及如何找到此文件夹路径