将 URL 变量传递给基于 class 的视图
Passing URL variables to a class based view
我刚开始弄乱基于 class 的视图,我希望能够从我的 class 中的 URL 访问变量。但我很难让它发挥作用。我看到了一些答案,但它们都很短,我发现它们没有任何帮助。
基本上我有一个url
url(r'^(?P<journal_id>[0-9]+)/$',
views.Journal_Article_List.as_view(),
name='Journal_Page'),
然后我想用ListView
来显示特定期刊中的所有文章。然而,我的文章 table 通过 journal_id
链接到期刊 table。所以我最终做了以下事情
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']
但我有点不知道我应该怎么做。我直接在 class 中尝试过,这让我知道 self 不存在或通过覆盖 get_queryset,在这种情况下它告诉我 as_view()
只接受已经是的属性的参数class.
如果覆盖 get_queryset
,您可以从 self.kwargs
中的 URL 访问 journal_id
:
def get_queryset(self):
return Articles.objects.filter(JOURNAL_ID=self.kwargs['journal_id'])
您可以阅读更多关于 django 的动态过滤 in the docs。
我刚开始弄乱基于 class 的视图,我希望能够从我的 class 中的 URL 访问变量。但我很难让它发挥作用。我看到了一些答案,但它们都很短,我发现它们没有任何帮助。
基本上我有一个url
url(r'^(?P<journal_id>[0-9]+)/$',
views.Journal_Article_List.as_view(),
name='Journal_Page'),
然后我想用ListView
来显示特定期刊中的所有文章。然而,我的文章 table 通过 journal_id
链接到期刊 table。所以我最终做了以下事情
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']
但我有点不知道我应该怎么做。我直接在 class 中尝试过,这让我知道 self 不存在或通过覆盖 get_queryset,在这种情况下它告诉我 as_view()
只接受已经是的属性的参数class.
如果覆盖 get_queryset
,您可以从 self.kwargs
中的 URL 访问 journal_id
:
def get_queryset(self):
return Articles.objects.filter(JOURNAL_ID=self.kwargs['journal_id'])
您可以阅读更多关于 django 的动态过滤 in the docs。