NoReverseMatch at /login/ Reverse for 'teacher_dashboard' with arguments '({'teacher':object (2)>},)' 未找到。尝试了 1 种模式:
NoReverseMatch at /login/ Reverse for 'teacher_dashboard' with arguments '({'teacher':object (2)>},)' not found. 1 pattern(s) tried:
Views.py
def Login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request , username=username , password=password)
if user is not None:
try:
is_teacher= Teacher.objects.get(profile_id=user.id)
except Teacher.DoesNotExist:
is_teacher = None
if is_teacher is not None:
login(request , user)
is_teacher= Teacher.objects.get(profile_id=user.id)
return redirect('teacher_dashboard' , {'teacher' : is_teacher})
else:
login(request , user)
return redirect('student_dashboard' )
return render (request , "pages/login.html")
urls.py
path('teacher_dashboard/', views.TeacherDashboard , name='teacher_dashboard'),
path('student_dashboard/', views.StudentDashboard , name='student_dashboard'),
我想在 html 页面重定向后发送查询集
在你的 urls.py 路径是这样的:
path('teacher_dashboard/', views.TeacherDashboard , name='teacher_dashboard')
此处 'teacher_dashboard/' 不期望“/”后的任何内容。如果您需要传递任何参数,那么您应该在 urls.py
中指定路径的那一部分
但是,这是不可能的。您需要使用 URL 传递的任何内容实际上都来自浏览器,您不希望浏览器传递查询集。所以基本上你可以做的是在 URL 中传递教师对象的 pk,然后再次在 TeachDashboard 中获取对象
您的代码中有 2 个错误
return redirect('teacher_dashboard' , {'teacher' : is_teacher})
因为 url 没有任何参数
path('teacher_dashboard/', views.TeacherDashboard , name='teacher_dashboard'),
你需要
return redirect('teacher_dashboard')
- 如果您想重定向到个别教师仪表板
return redirect('teacher_dashboard' , {'teacher' : is_teacher.id})
和url将是
path('teacher_dashboard/<int:teacher>', views.TeacherDashboard , name='teacher_dashboard')
您的 URL 不接受任何参数。您需要允许 URL 包含您将在视图中使用的数据;
urlpatterns = [
path("teacher_dashboard/<int:teacher>/", views.TeacherDashboard, name="teacher_dashboard")
URL 路径的文档是 here,其中有一个很好的示例详细说明了基于 URLs 的日期。
您还想只传递 Teacher
ID,而不是整个对象。所以你的观点应该做;
is_teacher = Teacher.objects.get(profile_id=user.id).id
return redirect('teacher_dashboard' , {'teacher' : is_teacher})
在代码的另一点上,如果我看到一个名为 is_teacher
的变量,我会期待一个 bool
,因为它要么是老师,要么不是老师。因此,我建议您也将其更改为 teacher = Teacher.objects.get(profile_id=user.id)
,因为您正在从数据库中获取教师对象。
Views.py
def Login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request , username=username , password=password)
if user is not None:
try:
is_teacher= Teacher.objects.get(profile_id=user.id)
except Teacher.DoesNotExist:
is_teacher = None
if is_teacher is not None:
login(request , user)
is_teacher= Teacher.objects.get(profile_id=user.id)
return redirect('teacher_dashboard' , {'teacher' : is_teacher})
else:
login(request , user)
return redirect('student_dashboard' )
return render (request , "pages/login.html")
urls.py
path('teacher_dashboard/', views.TeacherDashboard , name='teacher_dashboard'),
path('student_dashboard/', views.StudentDashboard , name='student_dashboard'),
我想在 html 页面重定向后发送查询集
在你的 urls.py 路径是这样的:
path('teacher_dashboard/', views.TeacherDashboard , name='teacher_dashboard')
此处 'teacher_dashboard/' 不期望“/”后的任何内容。如果您需要传递任何参数,那么您应该在 urls.py
中指定路径的那一部分但是,这是不可能的。您需要使用 URL 传递的任何内容实际上都来自浏览器,您不希望浏览器传递查询集。所以基本上你可以做的是在 URL 中传递教师对象的 pk,然后再次在 TeachDashboard 中获取对象
您的代码中有 2 个错误
return redirect('teacher_dashboard' , {'teacher' : is_teacher})
因为 url 没有任何参数
path('teacher_dashboard/', views.TeacherDashboard , name='teacher_dashboard'),
你需要
return redirect('teacher_dashboard')
- 如果您想重定向到个别教师仪表板
return redirect('teacher_dashboard' , {'teacher' : is_teacher.id})
和url将是
path('teacher_dashboard/<int:teacher>', views.TeacherDashboard , name='teacher_dashboard')
您的 URL 不接受任何参数。您需要允许 URL 包含您将在视图中使用的数据;
urlpatterns = [
path("teacher_dashboard/<int:teacher>/", views.TeacherDashboard, name="teacher_dashboard")
URL 路径的文档是 here,其中有一个很好的示例详细说明了基于 URLs 的日期。
您还想只传递 Teacher
ID,而不是整个对象。所以你的观点应该做;
is_teacher = Teacher.objects.get(profile_id=user.id).id
return redirect('teacher_dashboard' , {'teacher' : is_teacher})
在代码的另一点上,如果我看到一个名为 is_teacher
的变量,我会期待一个 bool
,因为它要么是老师,要么不是老师。因此,我建议您也将其更改为 teacher = Teacher.objects.get(profile_id=user.id)
,因为您正在从数据库中获取教师对象。