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

How to pass argument on custom context_processors.py?

是否可以将一些参数从动态 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'

还有其他方法可以做这样的事情吗?还是真的不行?

-谢谢。

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

你可以做的是向会话添加一些东西,因为它可以通过请求访问,但除非它是系统范围的东西或者非常通用,否则你通常最好通过你的视图提供你的上下文变量。特别是在您的示例中,如果您在 URL 中提供用户名,那么您将在该视图的响应中提供上下文,因此您可以在该点简单地提供 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