クラスベースのビューを使い始めたばかりで、クラス内のURLから変数にアクセスできるようにしたいと考えています。しかし、私はこれを動作させるのが難しいです。私はいくつかの答えを見たが、彼らはとても短かったので、彼らは助けにはならなかった。クラスベースビューへのURL変数の受け渡し
基本的に私はその後、私は特定のジャーナルにすべての記事を表示するのにListView
を使用したいURL
url(r'^(?P<journal_id>[0-9]+)/$',
views.Journal_Article_List.as_view(),
name='Journal_Page'),
を持っています。しかし、私の記事テーブルは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']
を使用して変数にアクセスすることができますしかし、私は一種の私はそれを行うことになっていますどのように失われています。私は自分自身が存在しないか、get_querysetを上書きすることによって私に教えてくれるクラスの中で直接試しました。その場合、as_view()
はすでにクラスの属性である引数だけを受け入れます。あなたがget_queryset
をオーバーライドする場合
ありがとうございました!これは動作します! – DisneylandSC
ところで、私は、.as_view()が私が定義したクラスのインスタンスを生成することを理解しています。それはまた、クラスのメインビットの.self.kwargsにアクセスできない理由です。クラスと特定のインスタンスではない? – DisneylandSC
クラス属性の 'self.kwargs'にアクセスすることはできません。なぜなら、リクエストが行われる前に、サーバの起動時にクラスがロードされるからです。あなたが言うように、 'as_view()'は、url設定で使用される呼び出し可能なビューを返しますが、クラスがロードされた後*に発生します。 – Alasdair