Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django+翻译问题;夹层_Python_Django_Mezzanine - Fatal编程技术网

Python Django+翻译问题;夹层

Python Django+翻译问题;夹层,python,django,mezzanine,Python,Django,Mezzanine,我遵循了所描述的方法 在索引页面上,我有一个表单,允许我在网站语言之间切换。我已经添加了“next”post属性,允许重定向到页面的正确语言版本 <form action="{% url 'set_language' %}" method="post"> {% csrf_token %} <input name="language" type="hidden" value="{{ language.code }}" /> <input name="next" typ

我遵循了所描述的方法

在索引页面上,我有一个表单,允许我在网站语言之间切换。我已经添加了“next”post属性,允许重定向到页面的正确语言版本

<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="language" type="hidden" value="{{ language.code }}" />
<input name="next" type="hidden" value="/{{ language.code }}/{{ request.path|slice:"4:" }}" />
<input type="submit" value="{{ language.code }}"
class="btn-link{% if language.code == LANGUAGE_CODE %} current{% endif %}" /></form>
My URL.py看起来像:

urlpatterns = i18n_patterns("",
    ("^admin/", include(admin.site.urls)),

    ("^", include("mezzanine.urls")),

    url("^$", "mezzanine.pages.views.page", {"slug": "/"}, name="home"),
)
总的来说,这种方法很有效。当用户在索引页面上时,他可以更改语言并重定向到正确的页面

第一个问题是夹层链接。如果用户单击该链接,他将被重定向到settings.py中language_CODE定义的语言。同时,如果用户单击夹层页面的菜单项,则一切正常

第二个问题是当用户点击夹层主页链接时。在这种情况下,用户也被重定向到由语言代码定义的站点版本


问题是,为什么我在会话中设置了LANGUAGE\u SESSION\u键后,它对将来以正确的语言呈现页面没有任何影响?

我用以下方法解决了我的问题。首先,改变了形式:

<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="language" type="hidden" value="{{ language.code }}" />
{% if request.path|slice:"4:"|length > 0 %}
    <input name="next" type="hidden" value="/{{ language.code }}/{{ request.path|slice:"4:" }}" />
{% else %}
    <input name="next" type="hidden" value="/" />
{% endif %}
<input type="submit" value="{{ language.code }}"
class="btn-link{% if language.code == LANGUAGE_CODE %} current{% endif %}" />
</form>

{%csrf_令牌%}
{%if请求.path |切片:“4:|长度>0%”
{%else%}
{%endif%}
如果用户从主页选择语言,则下一个值将为“/”,如果用户更改其他页面上的语言,则会更改语言前缀

此外,我不再在夹层中使用链接,因为根据当前语言,它们的解析不正确。我创建了普通的夹层页面,而不是链接

<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="language" type="hidden" value="{{ language.code }}" />
{% if request.path|slice:"4:"|length > 0 %}
    <input name="next" type="hidden" value="/{{ language.code }}/{{ request.path|slice:"4:" }}" />
{% else %}
    <input name="next" type="hidden" value="/" />
{% endif %}
<input type="submit" value="{{ language.code }}"
class="btn-link{% if language.code == LANGUAGE_CODE %} current{% endif %}" />
</form>