это, очевидно, уже обсуждаемая тема, но я борюсь с ответами, которые я нашел в Google, и здесь, на StackOverflow.Django Website multi-language
Я реализовал модели для включения нескольких языков, которые отлично работают. Моя проблема заключается в том, чтобы позволить пользователю на веб-сайте постоянно менять язык для себя.
У меня есть флаг языка в верхней строке меню, который пользователь может щелкнуть, чтобы изменить язык. Затем он открывается/setlanguage/de, тогда как de - это язык. а на английском языке и т.д.
def setlanguage(request, lang):
defaultLanguage = 'en'
try:
if 'language' in request.session:
pass
except KeyError:
request.session['language'] = defaultLanguage
if defaultLanguage == lang:
return redirect("/")
if lang not in list(Language.objects.all().values_list('code').distinct()):
request.session['language'] = defaultLanguage
else:
request.session['language'] = lang
return redirect('/')
Причина этого не работает это редирект и что я не могу установить любой переменные по запросу.
Однако, у меня действительно есть одна страница в любом случае, поэтому мне нужно перенаправить пользователя на «/». Мои переводы также поддерживают разные слизни в URL.
url(r'^show/(?P<slug>[-\w]+)', views.show, name='show'),
Так что я могу сделать AJAX запросы «/ страница/простой в использовании» или «/ страница/Einfach-цу-bedinen», чтобы получить ту же страницу.
Я действительно не хочу устанавливать cookie на компьютер пользователя. Я исхожу из PHP-фона, я полагаю, что обработка сеансов немного отличается в Django, поскольку я ожидаю, что она будет доступна во всем мире, а не на основе запроса?
Есть ли работа вокруг, чтобы не использовать сеанс, а просто перезагрузить страницу с выбранным языком без кластеризации исходного кода?
Спасибо! Это очень полезная информация. Для первого фрагмента кода из-за проблемы с запросом я получил страницы с ошибками из-за KeyError, таким образом я мог обойти эту проблему. Второй фрагмент кода: я не доверяю пользовательскому вводу, и поскольку он может быть вредоносным, я не хочу помещать его в запрос базы данных. Я знаю, что DJango заботится о SQL Injection, но почему-то я этому не верю. Я действительно вижу вашу работу! И я согласен, я не был доволен этим решением. Я думаю, файл настроек! – Richard
Прежде всего, если вы переходите на django из PHP, забудьте о SQL-инъекции, если вы не используете raw SQL (весь оператор или его фрагменты). ORM заботится об этом, и вы не должны делать это снова. Во-вторых: первый фрагмент фактически ничего не делает.Если у вас есть 'if X in Y:' НИКОГДА не будет бросать KeyError, потому что если оператор предназначен для проверки наличия ключа. Поэтому вы снова делаете что-то дважды. – GwynBleidD
Хорошо, хорошо. Я ценю вашу помощь! Я исправлю это и не буду производить такую чушь снова :) – Richard