如何在URL Django i18n中获取所有语言?

时间:2018-10-24 14:39:03

标签: django python-3.x django-views django-urls

我在网址中插入了i18n模式模块,并添加了一些语言:

urlpatterns += i18n_patterns(
    path('blog/', include('blog.urls')),
    path('contacts/', include('contacts.urls')),
    path('signup/', views.signup, name='signup'),
    path('login/', auth_views.login, {'template_name': 'login.html'}, name='login'),
    path('logout/', auth_views.logout, {'next_page': 'login'}, name='logout'),

)

LANGUAGES = (
    ('ru', 'Russian'),
    ('en', 'English'),
    ('es', 'Spain'),
)

但是,我在url中看到的唯一语言是它在LANGUAGE_CODE参数中设置的语言,而我拥有的唯一有效链接是带有language_code参数的链接。例如,现在我看到“ en”,但是我需要看到“ ru”和“ es”等。为了在这里获得所有其他语言,我该怎么办?如果我设置了prefix_default_language = False,那么我什至无法获得默认语言(分别是所有其他语言) 当我尝试使用具有set_language形式的模板时出现“找不到页面(404)”错误。例如,如果我有一个language_code == zh,当我尝试通过模板中的表单将其切换为ru语言时出现此错误(我得到了一个链接,例如:address:port / ru / blog )。因此,看来我需要使用会更改默认语言的视图。

[name='home']
languages/
admin/
en/
^media\/(?P<path>.*)$

模板:

<form action="{% url 'set_language' %}" method="post">
    {% csrf_token %}
    <input name="next" type="hidden" value="{{ redirect_to }}" />
    <select name="language">
        {% get_current_language as LANGUAGE_CODE %}
        {% get_available_languages as LANGUAGES %}
        {% get_language_info_list for LANGUAGES as languages %}
        {% for language in languages %}
            <option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected{% endif %}>
                {{ language.name_local }} ({{ language.code }})
            </option>
        {% endfor %}
    </select>
    <input type="submit" value="Go" />
</form>

1 个答案:

答案 0 :(得分:0)

我解决了。我在设置中有一个双MIDDLEWARE对象。下一个-没有localemiddleware。