Контекстные процессоры, пропускающие сеанс, который не существует - PullRequest
1 голос
/ 09 ноября 2010

Hay All, у меня есть простой контекстный процессор, который просматривает сеанс и существует ли ключ пользователя.Если это так, я хочу вернуть его в шаблон.

Вот мой контекстный процессор

def get_user_details(request):
    user = request.session['user']
    data = {
        'user':user
    }
    return data

, а вот примерное представление

def render_home(request):
    return render_to_response("home", context_instance=RequestContext(request))

Если сессия ['user'] не существует, я хочу, чтобы он молча потерпел неудачу или возвратил False или Null.

Поскольку ключ не существует в сессии, я получаю KeyError.

Любая идеякак это исправить?

Ответы [ 3 ]

3 голосов
/ 09 ноября 2010
user = request.session.get('user', None)

или

user = None
if 'user' in request.session:
    user = request.session['user']
3 голосов
/ 09 ноября 2010

Вы можете получить значение по умолчанию, например None, таким образом: request.session.get('user', None). Так же, как в обычных Python dicts.

0 голосов
/ 09 ноября 2010
def get_user_details(request):
    try:
        user = request.session['user']
    except KeyError:
        return
    data = {
        'user':user
    }
    return data

Или, если вы хотите поймать его дальше, сделайте это вместо:

def render_home(request):
    try:
        return render_to_response("home", context_instance=RequestContext(request))
    except KeyError:
        return
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...