2013-03-26 50 views
0

我有一个看起来像这样的视图功能:获取URL值在Django

def search_manager(request, account_id): 
    account = Account.objects.get(pk=account_id) 
    ... 

我想创建或者中间件或上下文处理器,在那里我可以设置将为每个视图设置一些值。有没有办法在中间件或上下文处理器中获得account_id,以便我可以获取所有视图所需的值?

回答

0

您可以使用会话变量来为用户会话设置值,这样每个请求都会包含account_id,因此您可以从中间件和其他视图访问该值。在视图或中间件中。请记住,例如,如果用户未登录,请求可能没有会话。

# set a value 
if hasattr(request, 'session'): 
    request.session['account_id'] = account_id 

# read a value 
if hasattr(request, 'session'): 
    account_id = request.session['account_id'] 

Django中的会话对象像字典一样工作。

+0

如果启用会话中间件,则发送到视图的每个请求都将包含一个会话对象。这并不意味着'account_id'会被设置。您不应该需要支票,但是在阅读时,您应该在request.session'或account_id = request.session.get('account_id')'中使用'if'account_id'来防止引发KeyErrors。 – Ngenator 2013-03-26 04:39:39

+0

的确,这就是为什么我发布了关于在会话上设置值的部分,这样他就可以在会话上设置account_id并在整个网站中使用它。如果他想要自动设置某些东西,那么,如果会话中间件按照您的说法启用,那么他可以使用'request.user' – PepperoniPizza 2013-03-26 14:39:32