具有 i18n 模式和普通 url_pattern 的 Django 切换语言
Django Switch language with i18n pattern and normal url_pattern
我必须为一个应用程序切换语言,该应用程序在 i18n 模式中有一些 urls,例如我们要翻译的所有页面,以具有良好的 SEO 前缀,以及我们需要翻译的其他页面不想在 url.
中有前缀
所以我将 2 种模式分开,直到一切正常,当我处理表单来处理切换语言时,我遇到的只是问题:
这是我的表格:
<form action="{% url 'set_language' %}" method="POST" class="langform" style="display:none;">
{% csrf_token %}
<input name="next" type="hidden" value="{{ request.get_full_path|strip_lang }}" />
<input name="language" id="language" type="hidden" value="" />
</form>
我通过 javascript 验证。一切都很好,我填写了语言值,表格很好地提交了。
我真正的问题是下一个值,因为我需要一个通用的下一个值,所以我用这样的过滤器做了一个 request.path :
@register.filter(name="strip_lang")
def strip_lang(value):
lang = get_language()
return '/%s/' % value.lstrip('/%s/' % lang)
此过滤器的目标是查看 url 是否有语言前缀,如果有,它将删除它以在下一个值中只有 url 没有前缀。
这个过滤器的输出是这样的:如果我们在 /fr/pages/default 它将是 /pages/default/
我点击了切换语言,但没有任何效果。它仍然是相同的语言。所以我删除了一个斜杠,但它是一个 404,因为它不是正确的路径...
我能做些什么来管理我所拥有的两种 url??一个有 URL 前缀,一个没有...
语言在某些情况下被很好地激活。
提前致谢!
好的,所以我设法让它工作我只需要将 {% language lang_code %} 添加到我的 link.
现在我的 url 正在使用通用的下一个值。
<ul class="lang-switch">
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
{% language lang_code %}
<li><a href="#" rel="{{ language.code }}">{{ language.code|upper }}</a></li>
{% endlanguage %}
{% endfor %}
</ul>
我只是 post 我的小 javascript 它可以帮助你让它发挥作用并了解我是如何做到这一点的:
$('.lang-switch li a').click(function (e) {
e.preventDefault;
var lang = $(this).attr('rel');
$('.langform #language').val(lang);
$('.langform').submit();
});
@register.filter(name="strip_lang")
def strip_lang(value):
lang = get_language()
return value.replace('/{0}/'.format(lang), '/')
适合我。
我必须为一个应用程序切换语言,该应用程序在 i18n 模式中有一些 urls,例如我们要翻译的所有页面,以具有良好的 SEO 前缀,以及我们需要翻译的其他页面不想在 url.
中有前缀所以我将 2 种模式分开,直到一切正常,当我处理表单来处理切换语言时,我遇到的只是问题:
这是我的表格:
<form action="{% url 'set_language' %}" method="POST" class="langform" style="display:none;">
{% csrf_token %}
<input name="next" type="hidden" value="{{ request.get_full_path|strip_lang }}" />
<input name="language" id="language" type="hidden" value="" />
</form>
我通过 javascript 验证。一切都很好,我填写了语言值,表格很好地提交了。 我真正的问题是下一个值,因为我需要一个通用的下一个值,所以我用这样的过滤器做了一个 request.path :
@register.filter(name="strip_lang")
def strip_lang(value):
lang = get_language()
return '/%s/' % value.lstrip('/%s/' % lang)
此过滤器的目标是查看 url 是否有语言前缀,如果有,它将删除它以在下一个值中只有 url 没有前缀。
这个过滤器的输出是这样的:如果我们在 /fr/pages/default 它将是 /pages/default/
我点击了切换语言,但没有任何效果。它仍然是相同的语言。所以我删除了一个斜杠,但它是一个 404,因为它不是正确的路径...
我能做些什么来管理我所拥有的两种 url??一个有 URL 前缀,一个没有...
语言在某些情况下被很好地激活。
提前致谢!
好的,所以我设法让它工作我只需要将 {% language lang_code %} 添加到我的 link.
现在我的 url 正在使用通用的下一个值。
<ul class="lang-switch">
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
{% language lang_code %}
<li><a href="#" rel="{{ language.code }}">{{ language.code|upper }}</a></li>
{% endlanguage %}
{% endfor %}
</ul>
我只是 post 我的小 javascript 它可以帮助你让它发挥作用并了解我是如何做到这一点的:
$('.lang-switch li a').click(function (e) {
e.preventDefault;
var lang = $(this).attr('rel');
$('.langform #language').val(lang);
$('.langform').submit();
});
@register.filter(name="strip_lang")
def strip_lang(value):
lang = get_language()
return value.replace('/{0}/'.format(lang), '/')
适合我。