J'ai du mal à comprendre pourquoi je continue à recevoir le NoReverseMatch

app / url.py

from django.conf.urls import url, patterns

from . import views

urlpatterns = patterns('',
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^(?P<contact_id>\d+)/detail/$', views.details, name='details'),


)

views.py

from django.core.urlresolvers import reverse
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse, HttpResponseRedirect
from django.http import Http404
from django.views import generic

from django.template import RequestContext, loader

from .models import Person
# Create your views here.


class IndexView(generic.ListView):
    template_name = 'ContactManager/index.html'
    context_object_name = 'contact_list'

    def get_queryset(self):
        return Person.objects.order_by('lname')


def details(request, contact_id):
    contact = get_object_or_404(Person, id=contact_id)
    return render(request, 'ContactManager/details.html', {'contact': contact})

# class DetailView(generic.ListView):
#     model = Person
#     context_object_name = 'contact'
#     template_name = 'ContactManager/details.html'
#
#     def get_queryset(self):
#  

index.html du modèle

{% if contact_list %}
    <ul>
        {% for contact in contact_list %}
            <li>
               <a href="{% url 'contact:details' contact_id=contact.id %}"> {{ contact.fname }} &nbsp; {{ contact.lname }}</a>
            </li>
        {% endfor %}
    </ul>
{% else %}
    <p>You don't have any contacts currently.</p>
{% endif %}

L'erreur que je reçois:

Reverse for 'details' with arguments '()' and keyword arguments '{'contact_id': 1}' not found. 1 pattern(s) tried: ['$(?P<contact_id>\\d+)/detail/$']

J'ai essayé d'utiliser des vues génériques et une foule d'arguments dans le {% url ... %} Toute aide serait très appréciée.

0
user3404884 16 juil. 2015 à 08:57

2 réponses

Meilleure réponse

Je pense que le modèle d'URL de détails a une erreur, dans le message d'erreur apparaît un modèle essayé, commencé et terminé par le signe $:

1 motif (s) essayé (s): ['$ (? P \ d +) / detail / $']

Vérifiez votre modèle qui est égal ou non:

^(?P<contact_id>\\d+)/detail/$

Si cela est correct, vérifiez votre fichier d'URL contenant des URL de contact et s'il est similaire ci-dessous:

url('^$', include(ContactManager.urls, namespace='contact'))

Supprimer le signe $ à la fin du modèle de préfixe:

url('^', include(ContactManager.urls, namespace='contact'))
3
M.javid 16 juil. 2015 à 06:19

Notez que cette erreur peut également survenir si vous ne définissez pas name dans votre urlpatterns.

Faire quelque chose comme

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^error_containing_view/$', views.error_containing_view, name='error_containing_view'),
]

Dans les urls.py de votre application corrigerait l'erreur.

0
unixia 6 juil. 2017 à 13:33