python - (Django) 将 'context' (基本信息)传递到每个页面,甚至表单?

标签 python django django-forms django-views

我对 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/

相关文章:

python - 具有噪声损失函数的 SciPy 优化

python - 关于 pandasql locals() 和 globals() 方法问题

Django 休息框架 - self.context 没有请求属性

python - 使用 django 表单验证来检查元素库存

python - 如何在表单 View 中捕获查询字符串参数?

jquery - Django Ajax ModelForm 向 request.POST 提交一个空表单

python - Django:将此行的 urls.py 中的使用 'url' 更改为 'path' (?P<hierarchy>.+)

python - 自动编码器输出和特征向量不正确

python - 用户所有帖子的总点赞数

javascript - 选择 django 模板中的所有复选框