NoReverseMatch位于/ animal_types / 10 /

时间:2018-10-25 02:47:08

标签: python django python-3.x django-urls

我收到一个错误NoReverseMatch at /animal_types/10/

异常值为:Reverse for 'animal' with arguments '('',)' not found. 1 pattern(s) tried: ['animal\\/(?P<animal_id>[0-9]+)\\/$']

这是我对动物的看法代码:

@login_required
def animal(request, animal_id):
    """shows a single animal and the schedule associated"""
    animal = Animal.objects.get(id=animal_id)
    schedule = animal.schedule_set.order_by('-date_added')
    context = {'animal':animal, 'schedule':schedule}
    return render(request, 'zoo_animal_feeders/animal.html', context)

感谢您的帮助。让我知道是否需要提供更多信息。

这是我的主要网址:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('users/', include('users.urls')),
    path('', include('zoo_animal_feeders.urls')),
]

这是它尝试执行的特定于应用的网址:

app_name = 'zoo_animal_feeders'
urlpatterns = [
    #This is for the home page
    path('', views.index, name='index'),

    #Show animal types
    path('animal_types/', views.animal_types, name='animal_types'),

    #Page that will access a certain category of animals
    path('animal_types/<int:animal_type_id>/', views.animal_type, name='animal_type'),

    #Page for accessing an animal (and its schedule)
    path('animal/<int:animal_id>/', views.animal, name='animal'),

    #Page for adding a new animal type
    path('new_animal_type/', views.new_animal_type, name='new_animal_type'),

    #Page for adding a new animal
    path('new_animal/<int:animal_type_id>/', views.new_animal, name='new_animal'),

    #page for adding a new schedule
    path('new_schedule/<int:animal_id>/', views.new_schedule, name='new_schedule'),

    #page for editing an animal
    path('edit_animal/<int:animal_id>/', views.edit_animal, name='edit_animal'),

    #page for editing a schedule
    path('edit_schedule/<int:schedule_id>/', views.edit_schedule, name='edit_schedule'),

]

/ animal_types /的模板:

{% extends 'zoo_animal_feeders/base.html' %}

{% block header %}
  <h2>{{ animal_type }}</h2>
{% endblock header %}


{% block content %}
  <p><a href="{% url 'zoo_animal_feeders:new_animal' animal_type.id %}">add new animal</a></p>

  {% for animal in animals %}
    <div class="panel panel-default">
      <div class="panel-heading">
        <h3>
          {{ animal.name }}
          <small>
            <a href="{% url 'zoo_animal_feeders:animal' schedule.id %}">see schedule</a>
            <a href="{% url 'zoo_animal_feeders:edit_animal' animal.id %}">edit animal</a>
          </small>
        </h3>
      </div>
      <div class="panel-body">
        {{ animal.text|linebreaks }}
      </div>
    </div>
  {% empty %}
    <li>There are no animals for this animal type yet.</li>
  {% endfor %}

{% endblock content %}

由于代码太多(回溯时间很长),因此不允许我添加回溯。

2 个答案:

答案 0 :(得分:0)

问题是这样的,<a href="{% url 'zoo_animal_feeders:animal' schedule.id %}">see schedule</a>我指的是schedule.id,它需要指向animal.id

这是正确的代码:

<a href="{% url 'zoo_animal_feeders:animal' animal.id %}">see schedule</a>

答案 1 :(得分:0)

您应该在网址中指定特定的变量名称“ animal_id”:

<a href="{% url 'zoo_animal_feeders:animal' animal_id=schedule.id %}">see schedule</a>
<a href="{% url 'zoo_animal_feeders:edit_animal' animal_id=animal.id %}">edit animal</a>

祝你好运。