Я сделал простое приложение с локализацией (django 2.2.4). Я создал способ изменения языка и использовал точный код в https://docs.djangoproject.com/en/2.2/topics/i18n/translation/, когда я запускаю его локально, используя
python manage.py runserver
, он работает нормально, но когда я запускаю его через nginx и gunicorn в другой Ubuntuсервер я получаю
Exception while resolving variable 'redirect_to' in template 'home/index.html'.
Traceback (most recent call last):
File "/home/administrator/environments/website/lib/python3.7/site-packages/django/template/base.py", line 829, in _resolve_lookup
current = current[bit]
File "/home/administrator/environments/website/lib/python3.7/site-packages/django/template/context.py", line 83, in __getitem__
raise KeyError(key)
KeyError: 'redirect_to'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/administrator/environments/website/lib/python3.7/site-packages/django/template/base.py", line 835, in _resolve_lookup
if isinstance(current, BaseContext) and getattr(type(current), bit):
AttributeError: type object 'RequestContext' has no attribute 'redirect_to'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/administrator/environments/website/lib/python3.7/site-packages/django/template/base.py", line 843, in _resolve_lookup
current = current[int(bit)]
ValueError: invalid literal for int() with base 10: 'redirect_to'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/administrator/environments/website/lib/python3.7/site-packages/django/template/base.py", line 850, in _resolve_lookup
(bit, current)) # missing attribute
django.template.base.VariableDoesNotExist: <unprintable VariableDoesNotExist object>
Существовала разница в версии Python, но после обновления до тех же точных версий Python (python3.7) возникает та же ошибка.
Код, выдающий исключение
{% load i18n %}
<form action="{% url 'set_language' %}" method="post">{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}">
<select name="language">
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected{% endif %}>
{{ language.name_local }} ({{ language.code }})
</option>
{% endfor %}
</select>
<input type="submit" value="Go">
</form>
Я просто ожидаю, что django распознает переменную redirect_to, поскольку она отлично работает локально с моим сервером разработки (python manage.py runserver
). Я установил производственный сервер, используяэто руководство https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-18-04
РЕДАКТИРОВАТЬ: Вот вид (очень просто)
class HomeView(TemplateView):
template_name = 'home/index.html'
def get(self, request):
sections = Section.objects.all()
return render(request, self.template_name, {'sections': sections })