Как создать разные, уникальные для блогов теги в django wagtail
Здравствуйте, я следую этому руководству, https://docs.wagtail.io/en/stable/getting_started/tutorial.html# и я нахожусь на части тегов.
Вопрос, который у меня возник, заключается в том, как мне создать теги, которые будут разными для каждого приложения. У меня есть два приложения, LibBlog и libnewsblog.
Если я создаю тег для Blog под названием School, я хочу, чтобы он искал только Blog. То же самое для Libnews. Сейчас, когда я нажимаю на тег "Школа", он показывает посты из LibBlog и LibNewsBlog.
В разделе, где описывается код для BlogTagIndexPage
, вам нужно убедиться, что ваш context['blogpages']
возвращает только страницы текущего сайта.
- Для получения текущего сайта вы можете использовать статический метод
Site.find_for_request
, вам нужно будет импортироватьSite
изwagtail.core.models
. .
- У
Site
будет атрибутroot_page
, который является первой страницей в пределах этого сайта (например, домашней страницей). - Для фильтрации запроса страницы по принадлежности к потомкам (не только прямым детям, но и детям, их детям и т.д.) можно использовать метод
descendant_of
.
Пример
- Соединив все это вместе, мы получили пересмотренную версию вашего
BlogTagIndexPage
, которая будет показывать толькоBlogPage
объекты на основеSite
для текущего запроса. - Мы заменили строку
blogpages = BlogPage.objects.filter(tags__name=tag)
на запрос, который сначала покажет страницы только в пределах текущего сайта. - Мы добавили строку
site = Site.find_for_request(request)
для определения текущегоSite
.
from wagtail.core.models import Page, Site
# ... other imports
class BlogTagIndexPage(Page):
def get_context(self, request):
site = Site.find_for_request(request) # added to determine current site
# Filter by tag
tag = request.GET.get('tag')
# blogpages = BlogPage.objects.filter(tags__name=tag)
blogpages = BlogPage.objects.descendant_of(site.root_page).filter(tags__name=tag) # changed to include only descendants of root page
# Update template context
context = super().get_context(request)
context['blogpages'] = blogpages
return context