我刚刚开始搞乱基于类的视图,我希望能够从我的类中的URL访问变量。但是我很难让这个工作。我看到了一些答案,但它们都很短暂,我发现它们没有任何帮助。
基本上我有一个网址
url(r'^(?P<journal_id>[0-9]+)/$',
views.Journal_Article_List.as_view(),
name='Journal_Page'),
然后我想使用ListView
来显示特定期刊中的所有文章。然而,我的文章表通过journal_id
链接到日记帐表。所以我最终做了以下
class Journal_Article_List(ListView):
template_name = "journal_article_list.html"
model = Articles
queryset = Articles.objects.filter(JOURNAL_ID = journal_id)
paginate_by = 12
def get_context_data(self, **kwargs):
context = super(Journal_Article_List, self).get_context_data(**kwargs)
context['range'] = range(context["paginator"].num_pages)
return context
但是,journal_id不会像在功能视图中那样传递。根据我在上面看到的主题,我可以使用
访问变量self.kwargs['journal_id']
但我有点迷失在我应该如何做到这一点上。我已经在类中直接尝试了它,它让我知道self不存在或者覆盖get_queryset,在这种情况下它告诉我as_view()
只接受已经是类的属性的参数。
答案 0 :(得分:8)
如果您覆盖get_queryset
,则可以通过journal_id
中的网址访问self.kwargs
:
def get_queryset(self):
return Articles.objects.filter(JOURNAL_ID=self.kwargs['journal_id'])
您可以阅读有关django的动态过滤in the docs的更多信息。