簡體   English   中英

在Django 1.9的ListView中使用get_queryset()方法

[英]Using get_queryset() method in ListView, Django 1.9

我一直很難使ListViews能夠按預期在我正在處理的博客項目上呈現。

我有一個Tag模型,它是Post模型的一部分,如下所示(來自我在models.py中的Post模型):

 class Post(models.Model):
    (...)
        tags = models.ManyToManyField(Tag)

views.py 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,
    )),

據我了解,訪問一個URL(對於本例而言,應位於localhost:8000/blog/tag/<name-of-tag-here>在views.py中調用TagListView,然后使用get_queryset()生成具有相同標簽的標簽的帖子的ListView的方法,然后查找模板(位於/blog/templates/blog ),在我正在查看的教程中,該/blog/templates/blog稱為tag_post_list.html ,但是-該文檔尚不清楚ListView如何找到要呈現的模板,而我只是遵循一個過時的教程。

對於將哪些變量傳遞到html模板以及如何訪問它們,我有些困惑。 從結果中我可以清楚地看到, get_queryset()實際上並不僅僅返回具有相同標簽列表的帖子。 此外,盡管很明顯我的base.html文件中的其他標記和元素都在顯示,但是我的css也不呈現(我已經為之發表了單獨的文章)

模板以{% extends 'base.html' %} (位於/blog/templates/ )開始,並通過{% for post in object_list %}訪問{% for post in object_list %} object_list顯然不包含我認為的內容,據我了解,這應該是由於我濫用ListView的get_queryset()方法的方式get_queryset()

謝謝。

這里有很多問題需要解決。 幾個答案:

您的ListView具有template_name屬性,您可以在其中指定要使用的模板,如下所示:

class TagListView(ListView):

    template_name = "tag_post_list.html"

    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()

請訪問此站點 ,以獲取基於類的視圖的可用屬性的快速列表。

第二個答案-您是在說:

tag = Tag.objects.get(slug=slug)
return tag.post_set.all()

...您認為實際上並沒有返回正確的Post對象。 從您的代碼尚不清楚為什么是這種情況。 您的觀點似乎是正確的,但正如Daniel Roseman指出的那樣,它應該基於Post而不是Tag模型。 覆蓋get_queryset方法以返回Post對象,但這意味着這不是有問題的問題。 解決第一個問題實際上可能會解決第二個問題,因為object_list從未被調用是因為未調用模板...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM