首页 > 解决方案 > 没有反向匹配错误但函数存在?

问题描述

我正在尝试renew为关键库存系统实现一个功能。但是当我呈现该页面时,即使我映射了正确的 URL 并使用了正确的函数名称,它也会显示 Reversematcherror。

这是我的模板:(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 %}

我的 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'),

视图.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' 不是有效的视图函数或模式名称。

标签: djangodjango-templatesdjango-views

解决方案


更新模板中的这一行。

<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'),

推荐阅读