【问题标题】:Wagtail modeltranslation language switcher doesn't work on /search pageWagtail 模型翻译语言切换器在 /search 页面上不起作用
【发布时间】:2020-10-04 09:49:21
【问题描述】:

我已将 search 网址添加到 i18n_patterns,但语言切换器在该页面上不起作用。
urls.py:

urlpatterns += i18n_patterns(
    path("search/", search_views.search, name="search"),
    path("", include(wagtail_urls)),
)

语言切换器:

{% get_available_languages_wmt as languages %}
<div class="nav-item dropdown float-right">
    <p class="nav-link dropdown-toggle m-auto" data-toggle="dropdown" role="button" aria-expanded="false">
        {{ request.LANGUAGE_CODE|upper }}</p>
    <div class="dropdown-menu w-25">
        {% for language in languages %}
        {% if language != request.LANGUAGE_CODE %}
        <a class="dropdown-item" href="{% change_lang language page %}">{{ language|upper }}</a>
        {% endif %}
        {% endfor %}
    </div>
</div>

此外,当我在root 上方添加search url 时,搜索页面会出现404 页。 如何使语言切换器在搜索页面上工作?

【问题讨论】:

    标签: python django search internationalization wagtail


    【解决方案1】:

    语言切换器使用 Wagtail page 变量。查看change_lang模板标签:

    <a ... href="{% change_lang language page %}">...</a>
    

    搜索是 Django 视图,而不是 Wagtail 页面。 page 变量未定义。

    您可以通过自己设置 href 使切换器在搜索视图上工作:

    {% for language in languages %}
        <a href="/{{ language.code }}/search/"
    {% endfor %}
    

    或者,您可以创建 Wagtail 搜索页面:

    class SearchPage(Page):
        def get_context(self, request):
            context = super().get_context(request)            
    
            ... # Copy the code from the current search view.
    
            # Update and return the context
            context.update({
                'search_query': search_query,
                'search_results': search_results,
            })
            return context
    

    https://docs.wagtail.io/en/latest/topics/pages.html#customising-template-context

    您还必须:

    • 重命名 (search_page.html) 并修改 (page.variable_name) 您的搜索模板。
    • 从 urls.py 中删除搜索 url
    • 通过 Wagtail 管理界面将 SearchPage 添加到页面树中。

    【讨论】:

    • 带有{% for language in languages %} &lt;a href="/{{ language.code }}/search/" {% endfor %} 的选项不起作用,因为网址有?query=... 部分,因为它是一个获取请求
    • 不切换?或者它不保留您的搜索查询?然后将?query=... 添加到您的href。
    • 我发现如何让它工作。这是一种不好的方法,但至少可以:&lt;a class="dropdown-item" href="/{{ language.code }}{{ request.get_full_path }}"&gt;{{ language.code|upper }}&lt;/a&gt;
    猜你喜欢
    • 1970-01-01
    • 2012-02-15
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多