Skip to main content
 首页 » 编程设计

python之通过单击 Bootstrap 下拉菜单中的 a> 链接在 Django 中设置模板语言

2025年05月04日31yxwkf

在 Django 的文档中有一个 example这显示了用户如何选择页面的语言。他们填写并提交表格。

这个例子对我有用。但是,我想使用 Bootstrap dropdown带有导致此行为的链接列表。我有想法将“下一个”输入的值设置为所选语言的代码并提交表单。这是代码:

<form name="ui" action="{% url 'set_language' %}" method="post">{% csrf_token %} 
    <input name="next" type="hidden" value="{{ redirect_to }}" /> 
    <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false"> 
    {% get_current_language as LANGUAGE_CODE %} 
    {% get_language_info for LANGUAGE_CODE as lang %} 
    {% get_available_languages as LANGUAGES %} 
    {% get_language_info_list for LANGUAGES as languages %} 
    {{ lang.name_local }} 
    <span class="caret"></span> 
    </a> 
    <ul class="dropdown-menu"> 
    {% for language in languages %} 
        <li><a href="#" onclick="document.ui.next.value='{{ language.code}}'; document.ui.submit();">{{ language.name_local }}</a></li>                                                                     
    {% endfor %} 
    </ul> 
</form> 

它生成以下 html 代码(我省略了 csrf token ,但它在那里):

<form name="ui" action="/i18n/setlang/" method="post"> 
    <input name="next" type="hidden" value="" /> 
    <a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">English<span class="caret"></span></a> 
                <ul class="dropdown-menu"> 
                    <li><a href="#" onclick="document.ui.next.value='en'; document.ui.submit();">English</a></li> 
                    <li><a href="#" onclick="document.uiLang.next.value='de'; document.uiLang.submit();">German</a> 
                    </li> 
                </ul> 
</form> 

然而,这会导致(选择带有“de”语言代码的德语)404 错误,请求 URL http://127.0.0.1:8000/i18n/setlang/de (并且,不要不知道为什么,使用请求方法“GET”)。

出了什么问题,我该如何解决?

附注线路

url(r'^i18n/', include('django.conf.urls.i18n')), 

在urls.py里面吗

请您参考如下方法:

这对我有用:添加一个名为“language”的附加输入元素

另外,在提交表单之前,在JS中为它分配一个语言代码,即document..language.value =

然后模板部分看起来像这样:

<form name="ui" action="{% url 'set_language' %}" method="post">{% csrf_token %} 
<input name="next" type="hidden" value="{{ redirect_to }}" /> 
<input name="language" type="hidden"/> 
<a class="dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false"> 
{% get_current_language as LANGUAGE_CODE %} 
{% get_language_info for LANGUAGE_CODE as lang %} 
{% get_available_languages as LANGUAGES %} 
{% get_language_info_list for LANGUAGES as languages %} 
{{ lang.name_local }} 
<span class="caret"></span> 
</a> 
<ul class="dropdown-menu"> 
{% for language in languages %} 
    <li><a href="#" onclick="document.ui.language.value='{{ language.code}}'; document.ui.submit();">{{ language.name_local }}</a></li>                                                                     
{% endfor %} 
</ul>