2013-04-17 84 views
6

我正在嘗試做django教程。我在教程04.我有以下幾點:Django教程04 NoReverseMatch在/民意調查/ 1/- u'polls'不是註冊的命名空間

  • Django的1.5.1(64位)
  • Python 2.7版(64位)

在頁面細節,它說:

NoReverseMatch at /polls/1/ 

它說:u'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,))) 

民調/ 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'), 
) 

調查/模板/調查/ 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> 

回答

20

沒關係。我只是錯過了一步。我只是改了行從:

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

要:

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

網站/ urls.py,現在說:

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

而現在它的工作原理。

+0

working .. for me also ... –

相關問題