wagtail_translation.py 文件源码

python
阅读 22 收藏 0 点赞 0 评论 0

项目:wagtail-translation 作者: skirsdeda 项目源码 文件源码
def change_lang(context, lang_code):
    if 'request' in context:
        request = context['request']

        if PAGE_TEMPLATE_VAR in context and isinstance(context[PAGE_TEMPLATE_VAR], AbstractPage):
            # current request points to a Wagtail page
            page = context[PAGE_TEMPLATE_VAR]

            with override(lang_code):
                trans_url_path = page.url_path
                # find position of first non-translated page in path (if any)
                non_trans_page = trans_url_path.find('//')
                if non_trans_page > 0:
                    # non-translated page found in path
                    root_page = request.site.root_page.specific
                    # get part of path from root path to first non-translated page
                    trans_url_path = trans_url_path[len(root_page.url_path):non_trans_page]
                    path_components = [comp for comp in trans_url_path.split('/') if comp]
                    # try to get that page
                    try:
                        page, args, kwargs = root_page.route(request, path_components)
                    except:
                        return ''
                elif non_trans_page == 0:
                    # root page not translated!
                    return ''
                return page.url
        elif 'object' in context:
            # for cases when DetailView or similar is used
            obj = context['object']
            with override(lang_code):
                try:
                    return obj.get_absolute_url()
                except:
                    pass

        # if none of the above URL translation methods worked
        # let's try replacing language prefix in URL
        current_lang = get_language_from_path(request.path_info)
        if current_lang is not None:
            return language_code_prefix_re.sub('/{}/'.format(lang_code), request.path_info)

    return ''
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号