1. ホーム
  2. python

[解決済み] Django のクラスベースのビューです。as_view メソッドに追加のパラメータを渡すには?

2022-10-09 17:17:15

質問

私はカスタムクラスベースのビューを持っています

# myapp/views.py
from django.views.generic import *

class MyView(DetailView):
    template_name = 'detail.html'
    model = MyModel

    def get_object(self, queryset=None):
        return queryset.get(slug=self.slug)

スラッグパラメータ(またはビューへの他のパラメータ)を以下のように渡したい。

MyView.as_view(slug='hello_world')

これを可能にするために、何かメソッドをオーバーライドする必要があるのでしょうか?

どのように解決するのですか?

に渡されるすべてのパラメータは as_view メソッドに渡されるすべてのパラメータは、View クラスのインスタンス変数です。つまり slug をパラメータとして追加するには、それをサブクラスのインスタンス変数として作成しなければならないことを意味します。

# myapp/views.py
from django.views.generic import DetailView

class MyView(DetailView):
    template_name = 'detail.html'
    model = MyModel
    # additional parameters
    slug = None

    def get_object(self, queryset=None):
        return queryset.get(slug=self.slug)

これは MyView.as_view(slug='hello_world') が機能するようになります。

キーワードで変数を渡す場合は、Erikkson氏が提案したものを使ってください。 https://stackoverflow.com/a/11494666/9903