diff --git a/.gitignore b/.gitignore index 4ff5976..24a6676 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ build/ dist/ docs/_build MANIFEST +*.egg-info \ No newline at end of file diff --git a/faq/templates/faq/question_detail.html b/faq/templates/faq/question_detail.html index 8f653cf..a0f312b 100644 --- a/faq/templates/faq/question_detail.html +++ b/faq/templates/faq/question_detail.html @@ -9,7 +9,7 @@ {% block header %} - {% trans "FAQ" %} › + {% trans "FAQ" %}{{ topic }} › {{ question }} {% endblock %} diff --git a/faq/templates/faq/topic_detail.html b/faq/templates/faq/topic_detail.html index 53dca0b..4cc564e 100644 --- a/faq/templates/faq/topic_detail.html +++ b/faq/templates/faq/topic_detail.html @@ -13,7 +13,7 @@ {% block header %} - {% trans "FAQ" %} › {{ topic }} + {% trans "FAQ" %} › {{ topic }} {% endblock %} diff --git a/faq/urls/deep.py b/faq/urls/deep.py index e5b111a..aae99a2 100644 --- a/faq/urls/deep.py +++ b/faq/urls/deep.py @@ -2,9 +2,9 @@ from django.conf.urls.defaults import * -from faq.views.shallow import topic_list -from faq.views.normal import topic_detail -from faq.views.deep import question_detail +from faq.views.shallow import TopicListView +from faq.views.normal import TopicDetailView +from faq.views.deep import QuestionDetailView # Include these patterns if you want URLs like: @@ -14,9 +14,13 @@ # /faq/topic/question/ # -urlpatterns = patterns('', - url(r'^$', topic_list, name='faq-topic-list'), - url(r'^(?P[-\w]+)/$', topic_detail, name='faq-topic-detail'), - url(r'^(?P[-\w]+)/(?P[-\w]+)/$', question_detail, - name='faq-question-detail'), +urlpatterns = patterns( + '', + url(r'^$', TopicListView.as_view(), name='faq-topic-list'), + url(r'^(?P[-\w]+)/$', TopicDetailView.as_view(), name='faq-topic-detail'), + url( + r'^(?P[-\w]+)/(?P[-\w]+)/$', + QuestionDetailView.as_view(), + name='faq-question-detail' + ), ) diff --git a/faq/urls/normal.py b/faq/urls/normal.py index 49e39cc..2833f01 100644 --- a/faq/urls/normal.py +++ b/faq/urls/normal.py @@ -2,8 +2,8 @@ from django.conf.urls.defaults import * -from faq.views.shallow import topic_list -from faq.views.normal import topic_detail, question_detail +from faq.views.shallow import TopicListView +from faq.views.normal import TopicDetailView, question_detail # Include these patterns if you want URLs like: @@ -13,9 +13,10 @@ # /faq/topic/#question # -urlpatterns = patterns('', - url(r'^$', topic_list, name='faq-topic-list'), - url(r'^(?P[-\w]+)/$', topic_detail, name='faq-topic-detail'), +urlpatterns = patterns( + '', + url(r'^$', TopicListView.as_view(), name='faq-topic-list'), + url(r'^(?P[-\w]+)/$', TopicDetailView.as_view(), name='faq-topic-detail'), url(r'^(?P[-\w]+)/(?P[-\w]+)/$', question_detail, name='faq-question-detail'), ) diff --git a/faq/urls/shallow.py b/faq/urls/shallow.py index a70f2a6..a97ee7e 100644 --- a/faq/urls/shallow.py +++ b/faq/urls/shallow.py @@ -2,8 +2,7 @@ from django.conf.urls.defaults import * -from faq.views.shallow import topic_list, topic_detail, question_detail - +from faq.views.shallow import TopicListView, topic_detail, question_detail # Include these patterns if you want URLs like: # @@ -12,8 +11,9 @@ # /faq/#question # -urlpatterns = patterns('', - url(r'^$', topic_list, name='faq-topic-list'), +urlpatterns = patterns( + '', + url(r'^$', TopicListView.as_view(), name='faq-topic-list'), url(r'^(?P[-\w]+)/$', topic_detail, name='faq-topic-detail'), url(r'^(?P[-\w]+)/(?P[-\w]+)/$', question_detail, name='faq-question-detail'), diff --git a/faq/views/deep.py b/faq/views/deep.py index 55b273b..77d2a76 100644 --- a/faq/views/deep.py +++ b/faq/views/deep.py @@ -1,27 +1,19 @@ # -*- coding: utf-8 -*- -from django.views.generic.list_detail import object_detail - from faq.models import Topic, Question +from django.views.generic.detail import DetailView -def question_detail(request, topic_slug, slug): - """ - A detail view of a Question. - Templates: - :template:`faq/question_detail.html` - Context: - question - A :model:`faq.Question`. - topic - The :model:`faq.Topic` object related to ``question``. +class QuestionDetailView(DetailView): + model = Question - """ - extra_context = { - 'topic': Topic.objects.published().get(slug=topic_slug), - } + def get_context_data(self, **kwargs): + context = super(QuestionDetailView, self).get_context_data(**kwargs) + context['topic'] = Topic.objects.published().get( + slug=context['question'].topic.slug + ) + return context - return object_detail(request, queryset=Question.objects.published(), - extra_context=extra_context, template_object_name='question', - slug=slug) + def get_template_names(self): + return ['faq/question_detail.html'] diff --git a/faq/views/normal.py b/faq/views/normal.py index ad1004a..ed6995c 100644 --- a/faq/views/normal.py +++ b/faq/views/normal.py @@ -1,33 +1,24 @@ # -*- coding: utf-8 -*- from django.core.urlresolvers import reverse -from django.shortcuts import get_object_or_404, redirect -from django.views.generic.list_detail import object_detail +from django.views.generic.detail import DetailView from faq.models import Topic, Question from faq.views.shallow import _fragmentify -def topic_detail(request, slug): - """ - A detail view of a Topic - - Templates: - :template:`faq/topic_detail.html` - Context: - topic - An :model:`faq.Topic` object. - question_list - A list of all published :model:`faq.Question` objects that relate - to the given :model:`faq.Topic`. +class TopicDetailView(DetailView): + model = Topic - """ - extra_context = { - 'question_list': Question.objects.published().filter(topic__slug=slug), - } + def get_context_data(self, **kwargs): + context = super(TopicDetailView, self).get_context_data(**kwargs) + context['question_list'] = Question.objects.published().filter( + topic__slug=context['topic'].slug + ) + return context - return object_detail(request, queryset=Topic.objects.published(), - extra_context=extra_context, template_object_name='topic', slug=slug) + def get_template_names(self): + return ['faq/topic_detail.html'] def question_detail(request, topic_slug, slug): diff --git a/faq/views/shallow.py b/faq/views/shallow.py index 1a50852..2a13e15 100644 --- a/faq/views/shallow.py +++ b/faq/views/shallow.py @@ -2,7 +2,8 @@ from django.core.urlresolvers import reverse from django.shortcuts import get_object_or_404, redirect -from django.views.generic.list_detail import object_list + +from django.views.generic.list import ListView from faq.models import Topic, Question @@ -15,20 +16,11 @@ def _fragmentify(model, slug, url=None): return redirect(url + fragment, permanent=True) -def topic_list(request): - """ - A list view of all published Topics - - Templates: - :template:`faq/topic_list.html` - Context: - topic_list - A list of all published :model:`faq.Topic` objects that - relate to the current :model:`sites.Site`. +class TopicListView(ListView): + model = Topic - """ - return object_list(request, queryset=Topic.objects.published(), - template_object_name='topic') + def get_template_names(self): + return ['faq/topic_list.html'] def topic_detail(request, slug):