2014-05-21 7 views
8

Sto imparando Django da [THIS] [1] tutorial. Evertyhing ha funzionato perfettamente fino a quando questo passaggio:I "sondaggi" di Django non sono uno spazio dei nomi registrato

Ora cambiare la vostra sondaggi/template index.html da:

<li><a href="{% url 'detail' poll.id %}">{{ poll.question }}</a></li> 

per puntare alla vista di dettaglio namespace:

<li><a href="{% url 'polls:detail' poll.id %}">{{ poll.question }}</a></li> 

Puoi vedi l'intero paragrafo [QUI] [2].

Ed è quello che è successo dopo che ho cambiato 'dettaglio' in 'sondaggi: particolare':

NoReverseMatch at /polls/ 
'polls' is not a registered namespace 
Request Method: GET 
Request URL: http://127.0.0.1:8000/polls/ 
Django Version: 1.6.4 
Exception Type: NoReverseMatch 
Exception Value:  
'polls' is not a registered namespace 
Exception Location: D:\Programy\Python 3.4\lib\site-packages\django\core\urlresolvers.py in reverse, line 528 
Python Executable: D:\Programy\Python 3.4\python.exe 
Python Version: 3.4.0 
Python Path:  
['D:\\dziango\\strona1', 
'D:\\Programy\\Python 3.4\\python34.zip', 
'D:\\Programy\\Python 3.4\\DLLs', 
'D:\\Programy\\Python 3.4\\lib', 
'D:\\Programy\\Python 3.4', 
'D:\\Programy\\Python 3.4\\lib\\site-packages'] 
Server time: Wed, 21 May 2014 16:36:13 +0200 

e qui è la mia Traceback:

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/polls/ 

Django Version: 1.6.4 
Python Version: 3.4.0 
Installed Applications: 
('django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'polls') 
Installed Middleware: 
('django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware') 


Template error: 
In template D:\dziango\strona1\polls\templates\polls\index.html, error at line 1 
    'polls' is not a registered namespace 
    1 : {% if latest_poll_list %} 
    <ul> 
    {% for poll in latest_poll_list %} 
     <li><a href=" {% url 'polls:detail' poll.id %} ">{{ poll.question }}</a></li> 
    {% endfor %} 
    </ul> 
{% else %} 
    <p>Nie ma ankiet.</p> 
{% endif %} 

Traceback: 
File "D:\Programy\Python 3.4\lib\site-packages\django\core\handlers\base.py" in get_response 
    114.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "D:\dziango\strona1\polls\views.py" in index 
    11.  return render(request, 'polls/index.html', context) 
File "D:\Programy\Python 3.4\lib\site-packages\django\shortcuts\__init__.py" in render 
    53.  return HttpResponse(loader.render_to_string(*args, **kwargs), 
File "D:\Programy\Python 3.4\lib\site-packages\django\template\loader.py" in render_to_string 
    169.   return t.render(context_instance) 
File "D:\Programy\Python 3.4\lib\site-packages\django\template\base.py" in render 
    140.    return self._render(context) 
File "D:\Programy\Python 3.4\lib\site-packages\django\template\base.py" in _render 
    134.   return self.nodelist.render(context) 
File "D:\Programy\Python 3.4\lib\site-packages\django\template\base.py" in render 
    840.     bit = self.render_node(node, context) 
File "D:\Programy\Python 3.4\lib\site-packages\django\template\debug.py" in render_node 
    78.    return node.render(context) 
File "D:\Programy\Python 3.4\lib\site-packages\django\template\defaulttags.py" in render 
    305.     return nodelist.render(context) 
File "D:\Programy\Python 3.4\lib\site-packages\django\template\base.py" in render 
    840.     bit = self.render_node(node, context) 
File "D:\Programy\Python 3.4\lib\site-packages\django\template\debug.py" in render_node 
    78.    return node.render(context) 
File "D:\Programy\Python 3.4\lib\site-packages\django\template\defaulttags.py" in render 
    196.       nodelist.append(node.render(context)) 
File "D:\Programy\Python 3.4\lib\site-packages\django\template\defaulttags.py" in render 
    447.       six.reraise(*exc_info) 
File "D:\Programy\Python 3.4\lib\site-packages\django\utils\six.py" in reraise 
    550.   raise value 
File "D:\Programy\Python 3.4\lib\site-packages\django\template\defaulttags.py" in render 
    433.    url = reverse(view_name, args=args, kwargs=kwargs, current_app=context.current_app) 
File "D:\Programy\Python 3.4\lib\site-packages\django\core\urlresolvers.py" in reverse 
    528.           key) 

Exception Type: NoReverseMatch at /polls/ 
Exception Value: 'polls' is not a registered namespace 

Ho provato ogni singola soluzione da [QUESTO] [3] argomento simile ma nessuno di loro funziona per me. Non incollo il mio codice qui perché ho scritto tutto da quel tutorial ed è esattamente lo stesso. Tutto ciò che ho fatto è stato fatto passo dopo passo in base ad esso. Ma se hai comunque bisogno del mio codice, per favore dillo e lo metto qui.

Ci scusiamo per il mio inglese.

== == EDIT ecco la mia radice di file urls.py:

from django.conf.urls import patterns, url, include 

from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
    url(r'^polls/', include('polls.urls', namespace="polls")), 
    url(r'^admin/', include(admin.site.urls)), 
) 

e questo è sondaggi/views.py:

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

from polls.models import Choice, Poll 

# Create your views here. 
def index(request): 
    latest_poll_list = Poll.objects.order_by('-pub_date')[:5] 
    context = {'latest_poll_list': latest_poll_list } 
    return render(request, 'polls/index.html', context) 

def detail(request, poll_id): 
    poll = get_object_or_404(Poll, pk=poll_id) 
    return render(request, 'polls/detail.html', {'poll':poll}) 

def results(request, poll_id): 
    return HttpResponse("Wyniki ankiety %s!" %poll_id) 

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':"Nie wybrałeś żadnej opcji.", 
      }) 
    else: 
     selected_choice.votes += 1 
     selected_choice.save() 
    return HttpResponse(reverse('polls:results', args=(p.id,))) 

sondaggi/urls.py:

AGGIORNAMENTO: Ok, ho fatto un errore stupido posizionando il mio urls.py nella directory wrond .. scusa

+0

Si prega di non rimuovere il testo della domanda del genere. Ho ripristinato le tue ultime due modifiche. – Stijn

+0

Riavvia il server web. Solo quello. – therealsix

risposta

25

Penso che ti sia dimenticato di impostare lo spazio dei nomi quando includi gli url dei sondaggi.

Nel file di root urlconf

Change

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

a

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

Nella versione 1.9.5, prima funziona comunque. Nel 1.8.5 il primo non funziona. Dovevo passare alla seconda affermazione –

Problemi correlati