私が取り組んでいるブログプロジェクトで期待どおりにListViewをレンダリングするのに問題がありました。ListViewでget_queryset()メソッドを使用すると、Django 1.9
次のように私は(models.pyで私のPostモデルから)、Postモデルの一部であるTagモデルを、持って次のようにviews.py
で
class Post(models.Model):
(...)
tags = models.ManyToManyField(Tag)
TagListViewは次のとおりです。
class TagListView(ListView):
def get_queryset(self):
slug = self.kwargs['slug']
try:
tag = Tag.objects.get(slug=slug)
return tag.post_set.all()
except Tag.DoesNotExist:
return Post.objects.none()
次のように
のURLは url(r'^blog/?', include('blog.urls')),
かかわらず、であるように、次のようにプロジェクトに含まれている(ある:
url(r'^tag/(?P<slug>[a-zA-Z0-9-]+)?/?$', TagListView.as_view(
paginate_by=5,
model=Tag,
)),
この例ではlocalhost:8000/blog/tag/<name-of-tag-here>
にあるURLにアクセスすると、views.pyのTagListViewが呼び出され、get_queryset()
メソッドを使用して同じスラッグのタグを含む投稿のListViewが生成されます。 (/blog/templates/blog
)、私が見ているチュートリアルではtag_post_list.html
と呼ばれるテンプレートが検索されますが、ListViewがレンダリングするテンプレートを見つけ出す方法は不明です。古いチュートリアル。
私は、どの変数がHTMLテンプレートに渡されているのか、それらにアクセスする方法について少し混乱しています。結果から、get_queryset()
は実際には同じタグリストの投稿のみを返すわけではないことは明らかです。私のbase.html
ファイルの他のタグと要素が明白に明らかであるにもかかわらず、Furthermore, my css isn't rendering, either (which I've made a separate post for)です。
テンプレートは(/blog/templates/
にあります)から始まり、{% for post in object_list %}
で投稿にアクセスします。 object_list
明らかに、私が理解する限り、リストビューのget_queryset()
メソッドを誤用している方法に起因するはずです。
ありがとうございました。
ここに欠落しているデバッグがあります。このビューが実際に呼び出されていることを確認しましたか?スラッグの引数が正しいことを確認しましたか?コードは 'get_queryset'に入りますか?あなたはその方法から返されているものを調べましたか?デバッガでこれをすべて実行することもできますし、印刷文を入れるだけで関連する点です。 –
これ以外には、これはタグではなく投稿のリストなので、モデルは投稿でなければなりません。しかし、それは何にも影響しません。 –
'object_list'には実際に何が入っていますか?何もない?他に何か? – YPCrumble