Я столкнулся с «Исключением при разрешении переменной« redirect_to »» при запуске приложения django - PullRequest
0 голосов
/ 04 октября 2019

Я сделал простое приложение с локализацией (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 })
...