NoReverseMatch в / animal_types / 10 / - PullRequest
       13

NoReverseMatch в / animal_types / 10 /

0 голосов
/ 25 октября 2018

Я получаю сообщение об ошибке 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)

Любая помощьоценили.Дайте мне знать, если мне нужно будет включить дополнительную информацию.

Вот мои основные URL:

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

Вот специфичный для приложения URL, который пытается выполнить:

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 голосов
/ 25 октября 2018

Вы должны указать конкретное имя переменной 'animal_id' в URL:

<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>

Удачи.

0 голосов
/ 25 октября 2018

Проблема была в следующем: <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>
...