【问题标题】:Caught NoReverseMatch while rendering渲染时捕获 NoReverseMatch
【发布时间】:2014-10-14 08:02:43
【问题描述】:

渲染时捕获 NoReverseMatch:未找到带有参数 '()' 和关键字参数 '{'student_pk': *****}' 的“accounts.views.new_fn”的反向。 (星号实际上是数字,我只是修改了它们)。

无论如何,我不太明白为什么这不起作用。在谷歌搜索这个错误时,这似乎来自没有正确定义 url,但是,我看不出这是怎么回事!像往常一样,感谢您的帮助!

来自 urls.py

 (r'^lockers/(?P<course_pk>\w+)/$', 'lockers'),
 (r'^lockers/(?P<course_pk>\w+)/assignlocker/$', 'lockerassign'),

来自views.py

 @user_is_valid
 def lockers(request, course_pk):
     print("Lockers - A")
     course = get_object_or_404(Course, pk=course_pk)
     students =       Student.objects.filter(--redacted, but this does work)
print("Render to Response - B")
return render_to_response("accounts/locker_roster.html", {'students':students, 'lockers':orderedlockers}, context_instance=RequestContext(request))


 @user_is_valid
 def lockerassign(request,student_pk):
if request.method == "POST":
    print("Method is Post - C")
    pass
else:
    print("Render form - D")
    lockers = Locker.objects.raw(sql query, which does in fact work)
    student = Student.object.get(pk=student_pk)
    print("Render to Response - E")
    return render_to_response("accounts/locker_assign.html",{'student':student , 'lockers':lockers} , context_instance=RequestContext(request))  

来自 locker_roster.html

 {%for student in students%}
             <tr>
                <td>{{student}}</td>
                <td style="text-align: right">
                  <a href="{% url accounts.views.lockerassign student_pk=student.pk%}">Assign Locker</a>
                 </td>
             </tr>
         {%endfor%}   

注意:谷歌浏览器将错误标记在学生迭代中。

【问题讨论】:

    标签: python django


    【解决方案1】:

    要使用{% url %} 标签,您需要将name 属性添加到您的url 以便Django 能够反转它们:

    (r'^lockers/(?P<course_pk>\w+)/$', name='lockers'),
    (r'^lockers/(?P<course_pk>\w+)/assignlocker/$', name='lockerassign'),
    

    要测试您是否已正确反转它们,请使用:django.core.urlresolvers.reverse()

    【讨论】:

      【解决方案2】:

      在您的 urlconf 中为 URL 提供了 name 属性后,您需要使用该名称而不是函数路径来反转它。

      {% url lockerassign student_pk=student.pk %}
      

      (我假设您最初没有使用引号,因此您使用的是 Django

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-14
        • 1970-01-01
        • 2011-04-23
        • 2011-07-06
        • 2013-12-27
        • 2017-06-06
        • 1970-01-01
        • 2011-06-02
        相关资源
        最近更新 更多