0

私は次のことをしたい:

リスト ビューを含む多数の項目を含むテンプレート ビュー (実際には私のランディング ページ)。

これで、独自の URL にマップすると機能するリスト ビューができました。

app/views.py

class MymodelListView(ListView):
    model = Mymodel
    context_object_name = "mymodel_list"

アプリ/urls.py

app_name = "myapp"
urlpatterns = [
 ...
    path("mlist/", MymodelListView.as_view(), name="mlist"),
 ...
]

アプリ/../mymodel_list.html

{% extends 'base.html' %}
{% block content %}
<ul>
    {% for adventure in adventure_list %}
    <li>
        <a href="{{ adventure.get_absolute_url }}">{{ adventure.title }}</a>
    </li>
    {% endfor %}
</ul>
{% endblock content %}

これで期待どおりに動作し、Mymodel のすべてのレコードが「mlist」リンクに表示されます。

ただし、これを index.html TemplateView に埋め込みたいと思います。私の考えは、スニペットを使用して、これをindex.htmlに入れることでした

{% include 'myapp/_mymodel_list.html' with mymodel_list=mymodel_list %}

(「with」部分が必要かどうかはわかりませんが、メインテンプレートからスニペットにリストを渡す必要があるようです。より基本的な問題のため、現時点ではどちらの方法でも機能しません)。

したがって、メインのホームページビューを次のように設定しています。

class HomePageView(TemplateView):
    template_name = "index.html"

    def get_context_data(self, *args, **kwargs):
        context = super(HomePageView, self).get_context_data(*args, **kwargs)
        context["adventure_list"] = MymodelListView.get_context_data()
        print(context)
        return context

しかし、これは次のようにクラッシュします:

Exception Type: TypeError at /
Exception Value: super(type, obj): obj must be an instance or subtype of type

self を に渡しても同じですMymodelListView.get_context_data(self)

私の知る限り、Mymodel の get コンテキストは混乱しています。これは、HomePage コンテキストが渡されており、すべてが少し間違っているためです。

私がやろうとしていることは完全に間違っていますか?私の(通常はかなり信頼できる)google-fuで役立つヒントが見つからないのはそのためですか?もしそうなら、代わりにどのようなアプローチをとるべきですか?

他のページで Mymodel リスト ビューを再利用したい (ただし、フィルタリング基準を変更する可能性がある) ため、このように DRY 方式で実行しようとしています。

4

1 に答える 1