MawaLog

一日一日、楽しく生きる。技術と音楽が好き。

Djangoのクラスベースビューでurl内のpkなどの変数の値をview内で取得する方法

目標

urls.pyがこうで、

url(r'^hoge/(?P<pk>[0-9]+)/$', HogeView.as_view(), name='hoge'),

views.pyのクラスベースビューでURL内のの値がほしいとき・・・

class HogeView(ListView):
    model = Hoge
    template_name = "hoge.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
                propertyinfo = Fuga.objects.get(id=pk) #これいけるのか!??

答え→クラスベースビューの場合、これじゃpkでオブジェクトを探せない・・・

じゃあどうするのかというと・・・

self.kwargs['pk']とすればよいだけ

class HogeView(ListView):
    model = Hoge
    template_name = "hoge.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
                propertyinfo = Fuga.objects.get(id=self.kwargs['pk'])

self.kwargs['pk']つまり、他にもself.kwargs['user']とかself.kwargs['username']とかとりたいときは、このようにすればOKってこと・・・知ると、「まあそうなんだ」で終わる程度ですが、初っ端調べるのが多少時間かかるので、ここで自分が忘れたときと、Djnagoユーザーの誰かのお役に立てますように・・・

参考にした記事

stackoverflow.com

追記

Django Rest Frameworkでも同じように参照できました^^


お気軽に押していただければ励みになります^^