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 个错误

  1. return redirect('teacher_dashboard' , {'teacher' : is_teacher})

因为 url 没有任何参数

path('teacher_dashboard/', views.TeacherDashboard , name='teacher_dashboard'),

你需要

return redirect('teacher_dashboard')
  1. 如果您想重定向到个别教师仪表板

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),因为您正在从数据库中获取教师对象。