def page_detail(request, path=None): page = get_object_or_404( Page.objects.active(), path=f"/{path}/" if path else '/', ) if page.redirect_to_url or page.redirect_to_page: return redirect(page.redirect_to_url or page.redirect_to_page) edit = request.user.is_authenticated and request.user.is_staff page.activate_language(request) ancestors = list(page.ancestors().reverse()) return render( request, page.template.template_name, { "page": page, "edit": edit, "header_image": page.image, "meta_tags": meta_tags([page] + ancestors, request=request), "regions": Regions.from_item( page, renderer=renderer, timeout=60, inherit_from=ancestors), }, )
def event_list(request): page = page_for_app_request(request) page.activate_language(request) ancestors = list(page.ancestors().reverse()) event_list = event_list_for_page(page) if "section" in request.GET: event_list = event_list.filter(section__slug=request.GET["section"]) return render_list( request, event_list, { "location_list": Location.objects.filter(event__in=event_list, ).distinct(), "page": page, "header_image": page.get_header_image(), "vapid_public_key": settings.VAPID_PUBLIC_KEY, "meta_tags": meta_tags([page] + ancestors, request=request), "regions": Regions.from_item( page, renderer=pages.renderer.renderer, timeout=60, inherit_from=ancestors, ), }, paginate_by=12, )
def article_detail(request, slug): page = page_for_app_request(request) page.activate_language(request) article = get_object_or_404(articles_for_page(page, allow_future=True), slug=slug) ancestors = list(page.ancestors().reverse()) edit = ( request.user.is_authenticated and request.user.section_set.filter(pk=article.section.pk).exists() ) return render( request, article.template.template_name, { "page": page, "article": article, "obj": article, "edit": edit, "header_image": article.get_header_image() or page.get_header_image(), "title": article.title, "meta_tags": meta_tags([article, page] + ancestors, request=request), "regions": Regions.from_item(article, renderer=renderer, timeout=60,), "page_regions": Regions.from_item( page, renderer=pages.renderer.renderer, timeout=60, inherit_from=ancestors, ), }, )
def teams_for_section(request): page = page_for_app_request(request) page.activate_language(request) section = page.site.section ancestors = list(page.ancestors().reverse()) return render_list( request, Team.objects.filter( section=section, language_code=page.language_code, ), { "page": page, "meta_tags": meta_tags([page] + ancestors, request=request), "regions": Regions.from_item( page, renderer=pages.renderer.renderer, timeout=60, inherit_from=ancestors, ), }, paginate_by=10, )
def team_detail(request, pk): page = page_for_app_request(request) page.activate_language(request) team = get_object_or_404(Team, pk=pk) ancestors = list(page.ancestors().reverse()) return render( request, "people/team_detail.html", { "page": page, "team": team, "meta_tags": meta_tags([page] + ancestors, request=request), "regions": Regions.from_item( page, renderer=pages.renderer.renderer, timeout=60, inherit_from=ancestors, ), }, )
def article_detail(request, slug): page = page_for_app_request(request) page.activate_language(request) ancestors = list(page.ancestors().reverse()) article = get_object_or_404(Article, slug=slug, namespace=page.namespace, language_code=page.language_code) return render( request, 'blog/article_detail.html', { 'page': page, 'title': article.title, 'article': article, "meta_tags": meta_tags([article, page] + ancestors, request=request), "blog_regions": Regions.from_item(article, renderer=renderer, timeout=60), "regions": Regions.from_item(page, renderer=cms_renderer, timeout=60, inherit_from=ancestors), })
def event_list_for_section(request, pk): page = page_for_app_request(request) page.activate_language(request) section = get_object_or_404(Section, pk) event_list = event_list_for_page(page) event_list = event_list.filter(section=section) ancestors = list(page.ancestors().reverse()) return render_list( request, event_list_for_page(page), { "page": page, "header_image": page.get_header_image(), "meta_tags": meta_tags([page] + ancestors, request=request), "regions": Regions.from_item( page, renderer=pages.renderer.renderer, timeout=60, inherit_from=ancestors, ), "section": section, }, paginate_by=20, )
def test_unknown_attribute_not_rendered(self): request = test.RequestFactory().get("/") self.assertEqual( str(meta_tags([], request=request, unknown="Stuff")), """\ <meta property="og:type" content="website"> <meta property="og:url" content="http://testserver/">""", )
def article_list(request): page = page_for_app_request(request) page.activate_language(request) article_list = articles_for_page(page) category_list = Category.objects.filter(article__in=article_list).distinct() if request.GET.get("category", None): article_list = article_list.filter( category__slug__in=request.GET.getlist("category") ) q = "" if request.GET.get("search", ""): vector = ( SearchVector("title", weight="A") + SearchVector("category__name", weight="A") + SearchVector("blog_richtext_set__text", weight="A") + SearchVector("blog_glossaryrichtext_set__text", weight="A") + SearchVector("author__first_name", weight="B") + SearchVector("author__last_name", weight="B") ) query = consume(request.GET["search"]) q = request.GET["search"] article_list = ( article_list.annotate( rank=SearchRank(vector, query, cover_density=True), headline=SearchHeadline( 'blog_richtext_set__text', query, max_words=25, min_words=20, max_fragments=2, ) ) .filter(rank__gt=0) .order_by("-rank") .distinct() ) ancestors = list(page.ancestors().reverse()) return render_list( request, article_list, { "page": page, "q": q, "header_image": page.get_header_image(), "vapid_public_key": settings.VAPID_PUBLIC_KEY, "category_list": category_list, "meta_tags": meta_tags([page] + ancestors, request=request), "regions": Regions.from_item( page, renderer=pages.renderer.renderer, timeout=60, ), }, paginate_by=12, )
def test_model(self): m = Model() request = test.RequestFactory().get("/stuff/") self.assertEqual( str(meta_tags([m], request=request)), """\ <meta property="og:type" content="website"> <meta property="og:url" content="http://testserver/stuff/">""", ) m.meta_canonical = "/bla/" self.assertEqual( str(meta_tags([m], request=request)), """\ <meta property="og:type" content="website"> <meta property="og:url" content="http://testserver/bla/"> <link rel="canonical" href="http://testserver/bla/">""", ) # meta_title not set, falling back to title m.title = "test" self.assertEqual( str(meta_tags([m], request=request)), """\ <meta property="og:title" content="test"> <meta property="og:type" content="website"> <meta property="og:url" content="http://testserver/bla/"> <link rel="canonical" href="http://testserver/bla/">""", ) m = Model() m.meta_title = "title-test" # Generate both name="description" and property="og:description" m.meta_description = "description-test" self.assertEqual( str(meta_tags([m], request=request)), """\ <meta property="og:description" content="description-test"> <meta property="og:title" content="title-test"> <meta property="og:type" content="website"> <meta property="og:url" content="http://testserver/stuff/"> <meta name="description" content="description-test">""", )
def collection_view(request): page = page_for_app_request(request) collection = page.collection ancestors = list(page.ancestors().reverse()) return render( request, 'link_collections/collection.html', { 'meta_tags': meta_tags([page] + ancestors, request=request), 'page': page, 'collection': collection, })
def test_basic_meta_tags(self): request = test.RequestFactory().get("/") self.assertEqual( str(meta_tags(request=request)), """\ <meta property="og:type" content="website"> <meta property="og:url" content="http://testserver/">""", ) lazy_url = lazy(lambda: "/lazy/", str)() self.assertEqual( str(meta_tags(url=lazy_url, request=request)), """\ <meta property="og:type" content="website"> <meta property="og:url" content="http://testserver/lazy/">""", ) self.assertEqual( str(meta_tags(request=request, defaults={"title": "stuff"}, title=None)), """\ <meta property="og:type" content="website"> <meta property="og:url" content="http://testserver/">""", )
def test_setting(self): request = test.RequestFactory().get("/") self.assertEqual( str(meta_tags([], request=request, unknown="Stuff")), """\ <meta property="og:description" content="desc"> <meta property="og:image" content="http://testserver/logo.png"> <meta property="og:site_name" content="site"> <meta property="og:title" content="t"> <meta property="og:type" content="website"> <meta property="og:url" content="http://testserver/"> <meta name="description" content="desc"> <meta name="robots" content="noindex">""", )
def event_detail(request, year, month, day, slug): page = page_for_app_request(request) page.activate_language(request) event = get_object_or_404( event_list_for_page(page, past_events=True), slug=slug, section=page.site.section, start_date__year=year, start_date__month=month, start_date__day=day, ) ancestors = list(page.ancestors().reverse()) return render( request, event.template.template_name, { "page": page, "event": event, "obj": event, "header_image": event.get_header_image() or page.get_header_image(), "title": event.title, "meta_tags": meta_tags( [event, page] + ancestors, request=request, ), "regions": Regions.from_item( event, renderer=renderer, timeout=60, ), "page_regions": Regions.from_item( page, renderer=pages.renderer.renderer, timeout=60, inherit_from=ancestors, ), }, )
def collection_view(request): page = page_for_app_request(request) collection = page.collection ancestors = list(page.ancestors().reverse()) return render( request, "link_collections/collection.html", { "meta_tags": meta_tags([page] + ancestors, request=request), "page": page, "collection": collection, }, )
def page_detail(request, path=None): page = Page.objects.active().filter(path=f"/{path}/" if path else "/") if path is None and not bool(page): return redirect(get_landing_page(request).path) if not bool(page): page = Page.objects.active().filter( path=f"/{request.LANGUAGE_CODE}/{path}/") if bool(page): return redirect(page[0].path) for language_code, _ in settings.LANGUAGES: page = Page.objects.active().filter( path=f"/{language_code}/{path}/") if bool(page): return redirect(page[0].path) raise Http404() page = page[0] if page.redirect_to_url or page.redirect_to_page: return redirect(page.redirect_to_url or page.redirect_to_page) edit = (request.user.is_authenticated and request.user.section_set.filter(pk=page.site.section.pk).exists()) page.activate_language(request) ancestors = list(page.ancestors().reverse()) return render( request, page.template.template_name, { "page": page, "edit": edit, "header_image": page.get_header_image(), "meta_tags": meta_tags([page] + ancestors, request=request), "regions": Regions.from_item( page, renderer=renderer, timeout=60, ), }, )
def person_detail(request, pk): page = page_for_app_request(request) page.activate_language(request) person = get_object_or_404(Person, pk=pk) articles = Article.objects.filter(author=person) memberships = person.membership_set.filter( team__language_code=page.language_code) ancestors = list(page.ancestors().reverse()) return render( request, "people/person_detail.html", { "page": page, "person": person, "memberships": memberships, "articles": articles, "header_image": page.get_header_image(), "title": person.get_full_name(), "meta_tags": meta_tags( [page] + ancestors, request=request, title=person.get_full_name(), description=person.description(), ), "regions": Regions.from_item( page, renderer=pages.renderer.renderer, timeout=60, inherit_from=ancestors, ), }, )
def location_detail(request, slug): page = page_for_app_request(request) page.activate_language(request) location = get_object_or_404(Location.objects.all(), slug=slug) ancestors = list(page.ancestors().reverse()) return render( request, "events/location_detail.html", { "page": page, "location": location, "obj": location, "title": location.name, "header_image": location.header_image or page.get_header_image(), "event_list": location.event_set.filter(end_date__gte=timezone.now(), ), "meta_tags": meta_tags([location, page] + ancestors, request=request), "regions": Regions.from_item( location, renderer=location_renderer, timeout=60, ), "page_regions": Regions.from_item( page, renderer=pages.renderer.renderer, timeout=60, inherit_from=ancestors, ), }, )
def glossary(request): page = page_for_app_request(request) page.activate_language(request) ancestors = list(page.ancestors().reverse()) entries = Entry.objects.filter(language_code=page.language_code) q = "" if "search" in request.GET and request.GET["search"]: vector = SearchVector("name", weight="A") + SearchVector("content", weight="B") query = consume(request.GET["search"]) print(query) q = request.GET["search"] print(q) entries = ( entries.annotate(rank=SearchRank(vector, query)) .filter(rank__gte=0.1) .order_by("-rank") ) return render_list( request, entries, { "page": page, "meta_tags": meta_tags([page] + ancestors, request=request), "header_image": page.get_header_image(), "regions": Regions.from_item( page, renderer=pages.renderer.renderer, timeout=60, inherit_from=ancestors, ), "search": q, }, paginate_by=50, )
def article_list(request): page = page_for_app_request(request) page.activate_language(request) ancestors = list(page.ancestors().reverse()) article_list = Article.objects.filter(namespace=page.namespace, publication_date__lte=timezone.now()) return render_list( request, article_list, { 'page': page, 'article_list': article_list, "meta_tags": meta_tags([page] + ancestors, request=request), "regions": Regions.from_item(page, renderer=cms_renderer, timeout=60, inherit_from=ancestors), })
def index(request): page = page_for_app_request(request) page.activate_language(request) campaign = page.campaign testimonials = campaign.testimonial_set.filter(public=True, validated=True) create_url = reverse_app(f"testimonials-{campaign.pk}", "create") paginator = Paginator(testimonials, 27) page_number = request.GET.get("page", 1) page_obj = paginator.get_page(page_number) ancestors = list(page.ancestors().reverse()) return render( request, page.template_key, { "campaign": campaign, "page_obj": page_obj, "page": page, "meta_tags": meta_tags([page] + ancestors, request=request), "create_url": create_url, "regions": Regions.from_item( page, renderer=renderer, timeout=60, inherit_from=page.ancestors().reverse(), ), }, )
def category_list(request, slug): page = page_for_app_request(request) page.activate_language(request) articles = articles_for_page(page).filter(category__slug=slug) ancestors = list(page.ancestors().reverse()) return render_list( request, articles, { "page": page, "header_image": page.get_header_image(), "meta_tags": meta_tags([page] + ancestors, request=request), "regions": Regions.from_item( page, renderer=pages.renderer.renderer, timeout=60, inherit_from=ancestors, ), }, paginate_by=10, )