1

我正在尝试实现一个语言切换器,为此我使用了 Django 推荐的表单:

    <form action="{% url 'set_language' %}" method="post">{% csrf_token %}
        {% get_current_language as LANGUAGE_CODE %}
        <input name="next" type="hidden" value="{{ redirect_to }}">
        <input name="language" type="hidden" value="{% if LANGUAGE_CODE == 'en' %}es{% else %}en{% endif %}">
    </form>

我的 urls.py 设置如下:

urlpatterns = [

    # Wagtail urls
    re_path(r'^cms/', include(wagtailadmin_urls)),
    re_path(r'^documents/', include(wagtaildocs_urls)),

    # Django urls
    path('admin/', admin.site.urls),
    path('i18n/', include('django.conf.urls.i18n')),

]

urlpatterns += i18n_patterns(
    path(r'', include(wagtail_urls))
)

当我单击更改我的语言时,我会正确转发到/en/sluges/slug,具体取决于我选择的语言。但是,实际的 slug 值没有被转换。因为我有西班牙语页面的西班牙语 slug,所以当我切换语言时,我会得到 404,因为我被定向到与西班牙语言环境前缀 ( es) 配对的英语 slug 值。

我也尝试使用slugurl_trans模板标签,但这似乎不起作用(可能是因为我没有在i18n_patterns调用中明确定义任何 URL?)。

任何有关这方面的指导都会非常有帮助,因为我在这方面花了太多时间!

4

1 回答 1

0

已经很久了,但无论如何我都会发布一个答案,摆脱不同蛞蝓问题的最佳方法是使用像这样的 django 信号

@receiver(pre_save)
def set_translated_slug_on_new_instance(sender, instance, **kwargs):
    if isinstance(instance, Page):
        instance.slug_es = instance.slug_en
于 2021-01-26T06:20:34.190 回答