如何显示摇摆页的子项

2024-10-02 10:31:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我的要求听起来很简单,但我正在努力让它工作

在我的wagtail项目中,我有一个BlogListingPage,它有许多子页面。我试图在网页中创建一个孩子列表。这是我的密码:

型号.py

class BlogListingPage(Page):    
    ...
    def get_context(self, request, *args, **kwargs):
        context = super().get_context(request, *args, **kwargs)
        context['blog_pages'] = BlogDetailPage.objects.live().child_of(self)
        return context


class BlogDetailPage(Page):
    ...    
    blog_listing = models.ForeignKey(BlogListingPage,
                                     on_delete=models.PROTECT,
                                     blank=True,
                                     null=True,)

视图.py

def blog(request):
    url = 'blog/blog_listing_page.html'
    context = {'data': BlogListingPage.objects.all()}
    return render(request, url, context)

blog\u listing\u page.html

{% block content %}
    {% for blog_listing in data %}
        {% for post in blog_listing.blogdetailpage %}
            <a href="{% pageurl post %}">{{ post.blog_title }}</a>
        {% endfor %}
    {% endfor %}
{% endblock content %}

我迷失在django/wagtail页面/objects/querysets/all()/specific的迷雾中

有人能带我去清澈的蓝色水域吗


Tags: pyselfgetobjectsrequestdefcontextpage
1条回答
网友
1楼 · 发布于 2024-10-02 10:31:19

关于您的方法,有几点建议:

  1. BlogDetailPageBlogListingPage拥有外键不是组织父子关系的摇摆方式。所有Page对象都已经有了树层次结构,您应该依赖它,否则您将丢失Wagtail提供的所有内置树处理

    您应该使用parent/subpage rules来指定页面类型如何相互关联。在您的情况下,它看起来像:

    class BlogListingPage(Page):    
        subpage_types = ['myapp.BlogDetailPage']
    
    class BlogDetailPage(Page):
        parent_page_types = ['myapp.BlogListingPage']
    
  2. 只有当Wagtail为视图中的特定页面提供服务时,BlogListingPage上的get_context()方法才会运行。当您在blog视图中迭代这些页面时,它不会运行。为了访问那里的孩子,您需要执行以下操作:

    {% for blog_listing in data %}
        {% for post in blog_listing.get_children.live %}
            <a href="{% pageurl post %}">{{ post.blog_title }}</a>
        {% endfor %}
    {% endfor %}
    

    也就是说,您需要使用页面上的get_children()方法来获取它的子级live()进一步过滤此内容以排除未发布的页面。注意,只有当博客文章是列表页面的子项(在Wagtail页面树的意义上)时,这才有效^如果您只使用post URL和title,{}在这里并不重要-如果您希望显示作为模型一部分的字段,而不是基本Page模型,则它是相关的

相关问题 更多 >

    热门问题