我对 Django 相当陌生(使用 1.6.2),我担心我可能会陷入不良实践,所以我必须问:
目前我正在处理一些简单的 View :主页、个人资料。对于这两个 View ,我检查用户是否使用 request.user
登录。如果该用户已登录,我会将他的信息传递到 context{} 并将其发送到模板。
那么,我基本上需要为每个想要包含该信息的 View 执行此操作吗?
#views.py
def home(request):
....etc....
context = {
'players' : players,
'teams' : teams,
}
if request.user.is_authenticated():
p = Player.objects.get(user=request.user)
if p:
context['p'] = p
return render(request, 'home.html', context)
所以我基本上检查是否应该在发送之前将这些信息添加到上下文中(如果可用)。问题是,此信息实际上用作标题,应该出现在每个页面上。有没有一种方法可以让我将其包含在每个 View 中,而无需将其引入上下文?
提前非常感谢。 StackOverflow 的你们确实帮助了我们很多人入门!
最佳答案
你可以写一个 custom context processor :
def foo(request):
"""
Adds Player to context
"""
context = {'p': None}
if request.user.is_authenticated():
p = Player.objects.get(user=request.user)
if p:
context['p'] = p
return context
并将其添加到settings.py中的TEMPLATE_CONTEXT_PROCESSORS
元组中(假设foo
放置在应用程序文件夹中的context_processors.py模块中):
TEMPLATE_CONTEXT_PROCESSORS = (
# ...
"your_app_name.context_processors.foo",
)
关于python - (Django) 将 'context' (基本信息)传递到每个页面,甚至表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23184172/