如何在自定义context_processors.py上传递参数?

时间:2016-04-30 23:09:02

标签: python django django-views django-context

是否可以将动态urls(我有^c/(?P<username>\w+)/^)中的某些参数传递给自定义context_processors

views.py(我将username从url传递到RequestContext

def client_profile(request, username):
     # .... some context
     return render_to_response('profile.html', context, 
                                context_instance=RequestContext(request, username))

context_processors.py

def default_profile(request, username):
    client = get_object_or_404(Client, user__username=username)
    #.... some default
    return {
        'client': client,
        #.... some default
    }

我试试这个,但是当我重新加载页面时出错了

  

default_profile() missing 1 required positional argument: 'username'

还有其他办法可以做这样的事吗?或者它真的不可能吗?

-Thanks。

1 个答案:

答案 0 :(得分:0)

上下文处理器相当简单,只有一个参数; HttpRequest

你能做什么,就是在会话中添加一些内容,因为可以通过请求访问,但除非它是系统范围内的或非常通用的,否则通常最好通过视图提供上下文变量。特别是在您的示例中,如果您在网址中提供用户名,则表示您在该视图的响应中提供了一个上下文,因此您可以在此时提供client

无论如何,如果您通过会话提供了某些内容,那么您的代码可能会是这样的;

def client_profile(request, username):
     # .... some context
     request.session['username'] = username
     return render_to_response(
         'profile.html', context, 
         context_instance=RequestContext(request, username)
     )

def default_profile(request):
    context = {}
    if 'username' in request.session:
        username = request.session['username']
        client = get_object_or_404(Client, user__username=username)
        context.update({
            'client': client,
        })

    return context