Unexpected NoReverseMatch error when using include() in urls patterns

879 Views Asked by At

I'm getting an error when referencing detail.html in index.html

Reverse for 'detail' with arguments '(3,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['$(?P<pk>[0-9]+)/$']

views.py

def rock_and_feat(request):
    feats = Feat.objects.order_by('-created')[:3]
    rocks = Rockinfo.objects.order_by('-rank')[:50]
    context = RequestContext(request, {
        'feats': feats, 'rocks': rocks
    })
    return render_to_response('template.html', context)


class DetailView(generic.DetailView):
    model = Feat
    template_name = 'feature/detail.html' 
    context_object_name = 'feat'

urls.py

urlpatterns = [
    url(r'^$', views.rock_and_feat, name='rock_and_feat'),
    url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),
]

index.html

{% extends "index.html" %}
{% block mainmast %}
<div id="wrapper">
{% if feats %}
{% for feat in feats %}
 <div class="specialsticky">
 <a href="{% url 'feature:detail' feat.id %}"><img src="{{ feat.image.url }}" alt="some text"></a>
  <h1 class="mast-header">
    <a href="#">{{feat.title}}</a>
  </h1>
 </div>

 {% endfor %}
 {% else %}
<p>No </p>
 {% endif %}
</div>
{% endblock %}

detail.html

{% extends "index.html" %}

<iframe width="560" height="345" src="{{ feat.youtube_link }}"       frameborder="0" allowfullscreen></iframe>

project urls.py

from django.conf.urls import include, url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static


urlpatterns = [
    url(r'^$', include('feature.urls', namespace="feature")),
    url(r'^admin/', include(admin.site.urls)),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

the app worked fine before I added the <a href= on the image in index.html.

Can't figure out what's wrong.

1

There are 1 best solutions below

2
On BEST ANSWER

This indicates the problem.

'$(?P<pk>[0-9]+)/$'

There shouldn't be a dollar sign (which matches the end of the string) at the beginning of the pattern.

The problem is caused by the way you are including the urls.py. You currently have a dollar in the regex:

url(r'^$', include('feature.urls', namespace="feature")),

To fix the problem, remove the dollar from the regex.

url(r'^', include('feature.urls', namespace="feature")),