如何避免多个主键路径Django中的错误

时间:2018-09-22 12:59:42

标签: django django-templates django-views

我想通过单击以下页面来查看学生的成绩: 选择会话->选择课程

但是出现错误:

  

对带有关键字参数“ {'pk_1':1}”的“ selectresult”进行反向   找到了。尝试了1种模式:   ['Dashboard \ / selectsession \ /(?P [0-9] +)\ /(?P [0-9] +)$']

我的代码:

urls.py中的网址模式:

path('selectsession/', views.SelectSession.as_view(), name='selectsession'),
path('selectsession/<int:session_pk>/', views.SelectCourse.as_view(), name='selectcourse'),
path('selectsession/<int:session_pk>/<int:pk_1>', views.BatchResult.as_view(), name='selectresult'),

模板: selectsession.html:

<li><a href="{% url 'Dashboard:selectcourse' session_pk=sesid.sesid %}">{{sesid.sesid}}</a></li>

selectcourse.html:

<li><a href="{% url 'Dashboard:selectresult' pk_1=course.course.cid %}">{{course.course}} {{course.teacher}}</a></li>

views.py:

@method_decorator(login_required, name='dispatch')
class SelectSession(ListView):
    template_name = 'Dashboard/selectsession.html'
    model = Session
    fields = ['sesid']

    def get_queryset(self):
        return Session.objects.all()

@method_decorator(login_required, name='dispatch')
class SelectCourse(ListView):
    template_name = 'Dashboard/selectcourse.html'
    model = Registration
    fields = ['all']

    def get_queryset(self):
        course = Registration.objects.filter(session_id=self.kwargs['session_pk'])
        return course

@method_decorator(login_required, name='dispatch')
class BatchResult(ListView):
    template_name = 'Dashboard/batchResult.html'
    model = Result
    fields = ['all']

    def get_queryset(self):
        result=Result.objects.filter(asign__reg__id=self.kwargs['pk_1'])
        return result

2 个答案:

答案 0 :(得分:0)

首先,遵循错误消息“未找到带有关键字参数'{'pk_1':1}的'selectresult'。”
也就是说,问题出在您的网址

path('selectsession/<int:session_pk>/<int:pk_1>', views.BatchResult.as_view(), name='selectresult'),

现在找出问题所在。...
这种类型的网址结构会生成这样的网址

localhost:8000/selectsession/2018/101

因此,当您调用此URL时,必须同时传递“ session_pk”和“ pk_1”这两个值。您可以像这样调用此网址

{% url 'Dashboard:selectresult' 2018 101 %} 

,此url标签将生成类似的

localhost:8000/selectsession/2018/101

如果您了解这一点,请将您的selectcourse.html更改为:

<li><a href="{% url 'Dashboard:selectresult' sesid.sesid course.course.cid %}">{{course.course}} {{course.teacher}}</a></li>  

还将selectcourse.html更改为:

<li><a href="{% url 'Dashboard:selectcourse' sesid.sesid %}">{{sesid.sesid}}</a></li>

答案 1 :(得分:-1)

您是否在两个列表视图中都尝试了self.kwargs['pk']而不是session_pkpk_1