Django 04 NoReverseMatch Tutorial at / polls / 1 / - u'polls' is not a registered namespace

I am trying to make a django tutorial. I am in tutorial 04. I got the following:

  • Django 1.5.1 (64-bit)
  • Python 2.7 (64-bit)

The page says in detail:

NoReverseMatch at /polls/1/ 

It says: u'polls' is not a registered namespace.

polls / views.py

 from django.http import HttpResponse, Http404, HttpResponseRedirect from django.shortcuts import render, get_object_or_404 from django.template import Context, loader from django.core.urlresolvers import reverse from polls.models import Poll def index(request): latest_poll_list = Poll.objects.order_by('-pub_date')[:5] template = loader.get_template('polls/index.html') context = Context({ 'latest_poll_list': latest_poll_list, }) return HttpResponse(template.render(context)) def detail(request, poll_id): try: poll = Poll.objects.get(pk=poll_id) except Poll.DoesNotExist: raise Http404 #return HttpResponseRedirect(reverse('poll_results', kwargs={'object_id': p.id})) return render(request,'polls/detail.html',{'poll':poll}) ''' poll = get_object_or_404(Poll, pk=poll_id) return render(request, 'polls/detail.html', {'poll': poll}) ''' def results(request, poll_id): poll = get_object_or_404(Poll, pk=poll_id) return render(request, 'polls/results', {'poll': poll}) def vote(request, poll_id): p = get_object_or_404(Poll, pk=poll_id) try: selected_choice = p.choice_set.get(pk=request.POST['choice']) except (KeyError, Choice.DoesNotExist): # Redisplay the poll voting form. return render(request, 'polls/detail.html', { 'poll': p, 'error_message': "You didn't select a choice.", }) else: selected_choice.votes += 1 selected_choice.save() # Always return an HttpResponseRedirect after successfully dealing # with POST data. This prevents data from being posted twice if a # user hits the Back button. return HttpResponseRedirect(reverse('polls:results', args=(p.id,))) 

polls / urls.py:

 from django.conf.urls import patterns, url from django.views.generic import DetailView, ListView from polls.models import Poll urlpatterns = patterns('', url(r'^$', ListView.as_view( queryset=Poll.objects.order_by('-pub_date')[:5], context_object_name='latest_poll_list', template_name='polls/index.html'), name='index'), url(r'^(?P<pk>\d+)/$', DetailView.as_view( model=Poll, template_name='polls/detail.html'), name='detail'), url(r'^(?P<pk>\d+)/results/$', DetailView.as_view( model=Poll, template_name='polls/results.html'), name='results'), url(r'^(?P<poll_id>\d+)/vote/$', 'polls.views.vote', name='vote'), ) 

polls / templates / polls / detail.html

 {% load url from future %} <h1>{{ poll.question }}</h1> {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %} <form action="{% url 'polls:detail' poll.id %}" method="post"> <!-- --> {% csrf_token %} {% for choice in poll.choice_set.all %} <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" /> <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br /> {% endfor %} <input type="submit" value="Vote" /> </form> 
+6
source share
1 answer

Nothing. I just skipped one step. I just changed the line:

 url(r'^polls/', include('polls.urls')), 

To:

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

In site / urls.py he now says:

 urlpatterns = patterns('', # Examples: # url(r'^$', 'hello.views.home', name='home'), # url(r'^hello/', include('hello.foo.urls')), # Uncomment the admin/doc line below to enable admin documentation: # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: url(r'^polls/', include('polls.urls', namespace="polls")), url(r'^admin/', include(admin.site.urls)), ) 

And now it works.

+20
source

All Articles