2014-05-22 9 views
5

Io uso Django CMS 3 e Django 1.6 e il predefinito django polls app e sto facendo un breve tutorial this.NoReverseMatch quando si utilizza Apphook senza namespace

mio problema è che il PollsApp funziona bene quando è using namespace in questo modo:

djangocms_polls/cms_app.py:

... 
class PollsApp(CMSApp): 
    name = _("Poll App") 
    urls = ["polls.urls"] 
    app_name = "polls" 
... 

sondaggi/templates/sondaggi/index.html:

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

Ma quando elimino la parte "polls:" dall'index.html, è w lavoro on't (e non importa se non c'è o non è app_name campo in PollsApp) e ottengo questo errore:

NoReverseMatch at /polls/

Exception Value:
Reverse for 'detail' with arguments '(1L,)' and keyword arguments '{}' not found. 0 pattern(s) tried: []

Perché sto facendo la mia vita difficile quando tutto funziona - si chiede? È perché voglio usare app che non usano namespace come django-shop e quando ho creato app per django-shop, si è verificato lo stesso problema.

+1

Penso che sia un bug nel tutorial. Controlla questo https://github.com/divio/django-cms-tutorial/issues/35 – azuax

risposta

0

Quando si utilizzano le app tramite un apphook in CMS, è necessario fornire uno spazio dei nomi quando si creano URL nei modelli.

In generale, inoltre, quando creo le app, credo che derivi da un approccio "best practice" per creare sempre uno spazio dei nomi per gli URL delle app e dei modelli.

Se si utilizza un'applicazione che non utilizza l'attributo Meta app_name, è possibile definire uno spazio dei nomi quando si includono gli URL di un'app nella root urls.py. Dai un'occhiata all'esempio qui; https://docs.djangoproject.com/en/1.7/topics/http/urls/#reversing-namespaced-urls