如何在自定义 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
是否可以将一些参数从动态 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