2014-05-22 13 views
5

Django CMS 3 ve Django 1.6 ve varsayılan django polls app kullanın ve this kısa ders çalışıyorum.Ad alanı olmadan Apphook kullanırken NoReverseMatch

Benim sorunum böyle ad kullanıyor zaman PollsApp çalışıyor olmasıdır:

djangocms_polls/cms_app.py:

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

anketler/templates/anketler/index.html:

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

Ancak "anketler:" bölümünü sildiğimde, index.html on't eser (orada ya PollsApp içinde app_name alan değilse ve bu önemli değil) ve bu hata alıyorum: her şey çalışıyor iken

NoReverseMatch at /polls/

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

Neden zor hayatımı yapıyorum - sorabilir? Bunun nedeni, django-shop gibi ad alanlarını kullanmayan ve django-shop için apphook oluşturduğumda aynı problemin ortaya çıkmasıdır.

+1

Bu, eğitimde bir hata olduğunu düşünüyorum. Bunu kontrol et https://github.com/divio/django-cms-tutorial/issues/35 – azuax

cevap

0

CMS'de bir Apphook aracılığıyla uygulamalar kullanıyorsanız, şablonlarda URL oluştururken bir ad alanı sağlamanız gerekir. Genel olarak, uygulama oluştururken, uygulamanızı ve şablon URL'lerinizi her zaman adlandırmak için 'en iyi uygulama' yaklaşımından geldiğine de inanıyorum.

app_name Meta niteliğinden yararlanmayan bir uygulama kullanıyorsanız, bir uygulamanın URL'sini root urls.py'a eklediğinizde bir ad alanı tanımlayabilirsiniz. Buradaki örneğe bir bakın; https://docs.djangoproject.com/en/1.7/topics/http/urls/#reversing-namespaced-urls