来自Objects.all()的Heirarchy树与Django中的通用视图

时间:2017-01-01 14:46:11

标签: django django-queryset django-generic-views

我正在使用Django开发博客。我正在使用通用视图,即。

from django.views.generic import dates 
from django.views.generic.list import ListView

这些工作正常,但我也希望在博客中实现一个可搜索的,可折叠的树,它将所有条目作为另一个可导航工具。即

2016
  Dec
    01 - Entry 1
    03 - Entry 2
  Mar
    23 - Entry 3
2015
  Nov
    01 - Entry 4
etc.  

我目前正在使用regroupCSS在HTML模板中执行此操作,我将其包含在每个通用视图使用的每个HTML模板中:

  {% block sidebar %}
    {% include '../blog_archive_tree.html' %}
  {% endblock %}

我的问题是,现在我需要对每个通用视图进行子类化,以便我可以将查询集Objects.all()传递给模板来创建树,这感觉就像我失去了使用的好处通用类。

来自urls.py:

from django.views.generic.list import ListView
from coltrane.models import Category

urlpatterns = [ 
    url(r'^$', 
        ListView.as_view(model=Category),
]

到此:

from coltrane.models import Category
from coltrane.models import Entry


class ArticleCategoryListView(ListView):
    model = Category
    def get_context_data(self, **kwargs):
        context = super(ArticleCategoryListView, self).get_context_data(**kwargs)
        context['for_tree_view'] = Entry.objects.all()
        return context

urlpatterns = [
    url(
        r'^$',
        ArticleCategoryListView.as_view(),
        name='coltrane_category_list'),
    )

我以这种方式设置了六个通用视图,每个视图都需要一个子类。必须有一个更好的方法来做到这一点?我曾考虑过每次对博客进行更改时预渲染blog_archive_tree.html创建的HMTL,但在每次更改时在实时环境中覆盖静态文件对我来说似乎不是一种非常稳定的方法。

任何见解/建议/替代方案都会受到欢迎。

注意 - 更新2017.01.02 根据Daniel Roseman的评论,我使用Inclusion Tag来实现所需。

由于模板已经写好,这似乎是一种巧妙的方法。

在应用程序模板标签(coltrane / templatetags / coltrane_tags.py)文件中,我添加了以下内容:

from coltrane.models import Entry

@register.inclusion_tag('blog_archive_tree.html')
def entries_tree():
    entries = Entry.objects.all()
    return {'for_tree_view': entries}

在模板中调用标记:

{% load coltrane_tags %}
{% entries_tree  %}

0 个答案:

没有答案