, TemplateResponseMixin, DetailView, ( SingleObjectTemplateResponseMixin) get_template_names(), , .
django-blog-zinnia
def get_template_names(self):
"""
Return a list of template names to be used for the view.
"""
model_type = self.get_model_type()
model_name = self.get_model_name()
templates = [
'zinnia/%s/%s/entry_list.html' % (model_type, model_name),
'zinnia/%s/%s_entry_list.html' % (model_type, model_name),
'zinnia/%s/entry_list.html' % model_type,
'zinnia/entry_list.html']
if self.template_name is not None:
templates.insert(0, self.template_name)
return templates
Django , , . , .
Update
, , - :
urls.py
url(r'^$', FrontpageView.as_view()),
url(r'^history/$', HistoryView.as_view()),
url(r'^calendar/$', CalendarView.as_view()),
url(r'^news/$', NewsView.as_view()),
url(r'^visitors/$', VisitorsView.as_view()),
...
url(r'^(?P<slug>[\w\d/-]+)/$', SuperSpecialAwesomeView.as_view()),
DetailView, class model, , slug url kwargs, , slug, , , do: Article.ojects.get(slug=self.kwargs['slug'])
models.py
type Article. , . , ChildrenView, YouthView AdultView music ( - , , ).
ARTICLE_TYPE_CHOICES = (
(0, 'music'),
(1, 'weddings'),
(2, 'outreach'),
...
)
class Article(models.Model):
...
type = models.IntegerField(choices=ARTICLE_TYPE_CHOICES)
...
view.py
class SuperSpecialAwesomeView(DetailView):
template_name = None
model = Article
def get_template_names(self):
slug = self.kwargs.get('slug', '')
templates = [
'{0}.html'.format(slug),
'{0}.html'.format(self.object.get_type_display()),
]
if self.template_name is not None:
templates.insert(0, self.template_name)
return templates
music slug ministry/children, Django ministry/children.html music.html.
(, , , SermonsView), SuperSpecialAwesomeView
class SermonsView(SuperSpecialAwesomeView):
paginate_by = 2
queryset = Article.objects.order_by('-publish_date')