Эта проблема частично объясняется отсутствием у меня полного понимания области видимости в python, поэтому мне нужно будет это рассмотреть. В любом случае, это серьезный тривиальный фрагмент кода, который постоянно падает в моем тестовом приложении Django.
Вот фрагмент:
@login_required
def someview(request):
try:
usergroup = request.user.groups.all()[0].name
except:
HttpResponseRedirect('/accounts/login')
if 'client' in usergroup:
stafflist = ProxyUserModel.objects.filter(groups__name='staff')
Здесь нет операции на головном мозге, проблема в том, что я получаю ошибку, такую как:
File "/usr/local/django/myapp/views.py", line 18, in someview
if 'client' in usergroup:
UnboundLocalError: local variable 'usergroup' referenced before assignment
Мой вопрос здесь, почему группа пользователей не связана? Если он не связан, это означает, что в операторе try было сгенерировано исключение, и в этот момент должно произойти HttpResponseRedirect, но этого не произойдет. Вместо этого я получаю ошибку HTTP 500, что немного сбивает с толку.
Да, я могу написать более разумный код и убедиться, что входящий пользователь определенно имеет группу, связанную с ним. Но это не производственное приложение, я просто пытаюсь понять / изучить Python / Django. Почему именно это происходит, когда пользователь, не связанный с группой, входит в систему, а не перенаправляет на страницу входа?
В этом случае я намеренно захожу в систему как пользователь, который не является частью группы. Это означает, что приведенный выше код должен вызвать исключение IndexError, как показано ниже:
>>> somelist = []
>>> print somelist[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range