def translation_links(context, calling_page): """Take the inclusion template 'translation_links.html' and return a snippet of HTML with links to the requesting page in all offered languages.""" language_results = [] query = '' try: query = context['request'].GET query = '?%s' % query.urlencode() if query else '' except Exception: pass if calling_page != "": for language_code, language_name in settings.ACTIVE_LANGUAGES: with use_language(language_code): language_url = pageurl(context, calling_page) language_name_local = get_language_info(language_code)['name_local'] language_results.append({ "code": language_code, "name": language_name, "url": language_url, "name_local": language_name_local, "query": query, }) return { 'languages': language_results, }
def clerk_slugurl(context, slug): """ Returns the URL for the page that has the given slug. First tries to find a page on the current site. If that fails or a request is not available in the context, then returns the URL for the first page that matches the slug on any site. Based on: https://github.com/wagtail/wagtail/blob/main/wagtail/core/templatetags/wagtailcore_tags.py#L48 """ page = None try: site = Site.find_for_request(context["request"]) current_site = site except KeyError: # No site object found - allow the fallback below to take place. pass else: if current_site is not None: page = ( Page.objects.in_site(current_site).filter(slug=slug).specific().first() ) # If no page is found, fall back to searching the whole tree. if page is None: page = Page.objects.filter(slug=slug).specific().first() if page: # call pageurl() instead of page.relative_url() here so we get the ``accepts_kwarg`` logic return pageurl(context, page)
def slugurl(context, slug): """Returns the URL for the page that has the given slug.""" page = Page.objects.filter(slug=slug).first() if page: return pageurl(context, page) else: return None
def cms_url(context, page): """Return the given pages url or the current pages draft url if in preview mode.""" request = context["request"] if not page: return None if hasattr(request, "is_preview") and request.is_preview: return reverse("wagtailadmin_pages:view_draft", args=(page.id,)) return pageurl(context, page)
def slugurl_trans(context, slug, language=None): """ Examples: {% slugurl_trans 'default_lang_slug' %} {% slugurl_trans 'de_lang_slug' 'de' %} Returns the URL for the page that has the given slug. """ language = language or DEFAULT_LANGUAGE with use_language(language): page = Page.objects.filter(slug=slug).first() if page: # call pageurl() instead of page.relative_url() here so we get the ``accepts_kwarg`` logic return pageurl(context, page)
def sensible_pageurl(context, page, fallback='#'): """ An improved {% pageurl %} that returns a fallback URL (default "#") when ``page`` is ``None``, unpublished, or inaccessible via a URL, rather than crashing, returning a URL that will 404, or returning ``None`` respectively. """ if page is None or not isinstance(page, Page) or not page.live: return fallback url = pageurl(context, page) if url is None: return fallback else: return url
def translation_links(context, calling_page): """Take the inclusion template 'translation_links.html' and return a snippet of HTML with links to the requesting page in all offered languages.""" language_results = [] if calling_page != "": for language_code, language_name in settings.ACTIVE_LANGUAGES: with use_language(language_code): language_url = pageurl(context, calling_page) language_results.append({ "code": language_code, "name": language_name, "url": language_url }) return { 'languages': language_results, }
def slugurl_trans(context, slug, language=None): """ Examples: {% slugurl_trans 'default_lang_slug' %} {% slugurl_trans 'de_lang_slug' 'de' %} Returns the URL for the page that has the given slug. """ language = language or DEFAULT_LANGUAGE with use_language(language): page = Page.objects.filter(slug=slug).first() if page: # call pageurl() instead of page.relative_url() here so we get the ``accepts_kwarg`` logic return pageurl(context, page)
def menu_primary(context, calling_page=None): try: menu = MenuSnippet.objects.get(menu_name__iexact="primary") except MenuSnippet.DoesNotExist: return {} links = [] for item in menu.links.all(): calling_page_path = calling_page.url_path if calling_page else '' item_path = item.link_page.url_path links.append({ "text": item.link_text, "url": pageurl(context, item.link_page), "active": calling_page_path.startswith(item_path) or calling_page_path == item_path }) return {"links": links, "request": context["request"]}