2013-09-29 2 views
1

У меня есть форма, которая в настоящее время перенаправляет на индексную страницу:Интернализационный набор языка переадресации. как перенаправить на ту же страницу?

{% 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 %} 

Как я могу сделать это перенаправление на той же странице?

+2

Пробовал с помощью 'действие = ""'? –

+0

@kroolik/i18n/setlang/делает всю магию, которая меняет язык на веб-сайте. value = "/" - значение, в котором он должен перенаправляться. – Marijus

+0

Вы пробовали возвращать 'redirect (request.REQUEST ['next'])' ([docs] (https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#redirect)) в ' setlang' view? –

ответ

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 }}"/> 
+0

Спасибо, это здорово! – Marijus

1
<input name="next" type="hidden" value="{{ request.path }}"/> 
+0

Я уже пробовал это. request.path возвращает текущий путь, в то время как мне нужен новый. Например, если бы я был в/ru/категориях, и я переключился на русский, он все равно вернул бы/en/categories, потому что его путь, который исходит и что мне нужно, - это/ru/categories. – Marijus

+0

Напишите свой собственный тег шаблона, чтобы создать URL-адрес для нового языка. – Ski

0

Я не совсем уверен, что я понял проблему, но я полагаю, вы можете использовать что-то вроде этого.

urlpatterns = patterns('', 
(r'^blablabla/(?P<language>\w{2})/categories/$', views.my_view), 

И чем простираются страницы на основе language

-1

Это проще

from django.utils.translation import get_language 

def strip_lang(value): 
    lang = get_language() 
    return '/%s' % value.lstrip('/%s/' % lang) 
+0

Если 'lang = 'en'' и' value ='/en/ближайшее-store/'', то возвращаемым значением будет' '/ arest-store /'. Не пропускайте более одного символа в 'lstrip' :) – r3m0t

Смежные вопросы