Нет ошибки обратного соответствия, но функция существует? - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь реализовать функцию renew для ключевой системы инвентаризации.Но когда я отрисовываю эту страницу, она показывает Reversematcherror, хотя я сопоставил правильный URL и использовал правильное имя функции.

Вот мой шаблон: (URL-тег находится на супер длинной строке полностью вправо)

{% block content %}
    <h1>All Borrowed Keys</h1>

    {% if keyinstance_list %}
    <ul>

      {% for keyinst in keyinstance_list %} 
      <li class="{% if keyinst.is_overdue %}text-danger{% endif %}">
        <a href="{% url 'roomkey-detail' keyinst.roomkey.pk %}">{{keyinst.roomkey}}</a> 
        ({{ keyinst.due_back }}) 
        {% if user.is_staff %}
           - {{ keyinst.borrower }}
        {% endif %} 
        {% if perms.catalog.can_mark_returned %}
           - <a href="{% url 'renew_key_user' keyinst.id %}">Renew</a>  
        {% endif %}
      </li>
      {% endfor %}
    </ul>

    {% else %}
      <p>There are no keys borrowed.</p>
    {% endif %}  

{% endblock %}

My urls.py:

path('key/<uuid:pk>/renew/', views.renew_key_user, name='renew-key-user'),
path('key/<int:pk>/detail', views.KeyDetailView.as_view(), name='roomkey-detail'),

Views.py:

@permission_required('catalog.can_mark_returned')
def renew_key_user(request, pk):
    """
    View function for renewing a specific keyInstance by admin
    """
    key_inst=get_object_or_404(KeyInstance, pk = pk)

    # If this is a POST request then process the Form data
    if request.method == 'POST':

        # Create a form instance and populate it with data from the request (binding):
        form = RenewKeyForm(request.POST)

        # Check if the form is valid:
        if form.is_valid():
            # process the data in form.cleaned_data as required (here we just write it to the model due_back field)
            key_inst.due_back = form.cleaned_data['renewal_date']
            key_inst.save()

            # redirect to a new URL:
            return HttpResponseRedirect(reverse('all-borrowed-keys') )

    # If this is a GET (or any other method) create the default form.
    else:
        proposed_renewal_date = datetime.date.today() + datetime.timedelta(weeks=3)
        form = RenewKeyForm(initial={'renewal_date': proposed_renewal_date,})

    return render(request, 'catalog/roomkey_renew_user.html', {'form': form, 'keyinst':key_inst})



class KeyDetailView(generic.DetailView):
    model = RoomKey

Ошибка говорит:

Реверс для 'views.renew_key_user' не найден.'views.renew_key_user' не является допустимой функцией представления или именем шаблона.

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Ваше имя содержит - дефис не _ подчеркивание

измените это renew_key_user на renew-key-user в вашем шаблоне

 <a href="{% url 'renew-key-user' keyinst.id %}">Renew</a>
0 голосов
/ 17 мая 2018

Обновите эту строку в вашем шаблоне.

<a href="{% url 'renew-key-user' keyinst.id %}">Renew</a>

, так как имя в URL-адресе является renew-key-user

path('key/<uuid:pk>/renew/', views.renew_key_user, name='renew-key-user'),
0 голосов
/ 14 мая 2018

Ваш шаблон запрашивает 'roomkey-detail', но предоставленный вами фрагмент URL показывает только URL с именем 'renew-key-user'.Если нет больше определений URL, которые вы нам не показываете, код завершается с ошибкой, как и ожидалось, поскольку он не может найти URL с именем, которое вы запрашиваете.

...