我有一个目前重定向到索引页面的表单:
{% for lang in LANGUAGES %}
<form name="setLang{{ lang.1 }}" action="/i18n/setlang/" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="/"/>
<input type="image" name="language" src="/static/img/{{ lang.0 }}.png" alt="{{ lang.1 }}" value="{{ lang.0 }}"/>
<a href="/" onclick="document.setLang{{ lang.1 }}.submit();return false;"></a>
</form>
{% endfor %}
如何将其重定向到同一页面?
答案 0 :(得分:5)
你需要的是一种获取当前路径的方法,但是没有领先的语言代码。鉴于Django会自动将用户重定向到正确的URL。
我编写了一个简单的函数,用于从给定路径中删除当前语言。它基于django.core.urlresolvers.resolve
如何处理路径中的语言代码,因此应该非常可靠:
from django.utils.translation import get_language
import re
def strip_lang(path):
pattern = '^(/%s)/' % get_language()
match = re.search(pattern, path)
if match is None:
return path
return path[match.end(1):]
您可以在视图中使用它来向模板传递无语言路径:
def your_view(request):
next = strip_lang(request.path)
return render(request, "form.html", {'next': next})
然后在模板中使用它:
<input name="next" type="hidden" value="{{ next }}"/>
或者,您可以轻松地make the function into a template filter直接在模板中使用它:
<input name="next" type="hidden" value="{{ request.path|strip_lang }}"/>
答案 1 :(得分:1)
<input name="next" type="hidden" value="{{ request.path }}"/>
答案 2 :(得分:0)
我不完全确定我理解了这个问题,但我相信你可以使用这样的东西。
urlpatterns = patterns('',
(r'^blablabla/(?P<language>\w{2})/categories/$', views.my_view),
而不是基于language
答案 3 :(得分:-1)
这更简单
from django.utils.translation import get_language
def strip_lang(value):
lang = get_language()
return '/%s' % value.lstrip('/%s/' % lang)