私は次のことをしたい:
リスト ビューを含む多数の項目を含むテンプレート ビュー (実際には私のランディング ページ)。
これで、独自の 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 方式で実行しようとしています。