Need Guidance for django wagtail

时间:2018-09-18 08:48:32

标签: django wagtail

currently i'm trying to Integrating Wagtail with existing django project.

I'm new in wagtail, and still learning about wagtail

class BlogPage(Page):
body = RichTextField(blank=True)
categories = ParentalManyToManyField('blog.BlogCategory', blank=True)
location = models.ForeignKey('blog.Location', on_delete=models.PROTECT)

and then i register the category and the location model as snippets.

how's the best practice for build page contains of BlogPage with certain category / location ?

and how to call that page from django's menu

or maybe where can i find documentation for integrating wagtail to existing django project

Thank you

1 个答案:

答案 0 :(得分:1)

I think you're looking for a Blog Listing Page, where you can list all your blog posts and then have blog posts based on a certain category.

You'll probably want to use a RoutablePageMixin (if you're not creating an SPA with Vue or React). A RoutablePageMixin lets you automatically create additional child pages, without having to create Wagtail child pages.

from wagtail.contrib.routable_page.models import RoutablePageMixin, route


class BlogListingPage(RoutablePageMixin, Page):
    """BlogListingPage class."""

    template = 'cms/blog/blog_listing_page.html'
    subpage_types = ['pages.BlogPage']

    # ... other fields here

    @route(r'^category/(?P<cat_slug>[-\w]*)/$', name='category_list')
    def category_list(self, request, cat_slug):
        """Return posts in a certain category."""
        context = self.get_context(request)
        posts = BlogPage.objects.live().filter(categories__slug=cat_slug).order_by('-pub_date')
        context['posts'] = posts
        return render(request, 'cms/blog/blog_category_page.html', context)

Note I did not test this code, you may need to fix any errors and adjust this for your needs.

The above code will take your blog listing page (say its localhost:8000/blog/) and create a category listing page (ie. localhost:8000/blog/category/topic-slug/)

That topic-slug will be passed into the category_list() method, where you can then filter your BlogPage's based on the category(ies) it's in. It will add posts to your page, and render a different listing page, where you can customize your template.

It's been a while since I checked, but the Wagtail Bakery Demo probably has examples of this in there (and a lot of really sweet goodies).

You can read more about Wagtail Routable Pages at https://docs.wagtail.io/en/latest/reference/contrib/routablepage.html as well.