您将如何在 django 中设置“上下文”类型的对象
Posted
技术标签:
【中文标题】您将如何在 django 中设置“上下文”类型的对象【英文标题】:How would you setup a "context" type object in django 【发布时间】:2016-10-15 14:18:34 【问题描述】:在 Rails 中,如果我想设置一个“上下文”,它基本上是每个视图都需要的对象,例如登录用户的用户对象,或者说存储/帐户/位置对象,我将如何使用它django 框架中的每个视图?
在 Rails 中我会这样做:
class BaseController
before_action :setup_context
def setup_user
@user = # load user from db
@location = # load location for user
end
end
class HomeController < BaseController
def index
# I now can use the variables @user and @location
end
end
Django 是否有这些类型的事件,我可以加载对象并在我的所有视图中使用它们?
【问题讨论】:
您只需要访问user
吗?如果是这样,那么 request.user
是要访问的视图方法的对象。
@ShangWang 不是用户,我通常这样做: context.user context.location context.account 即添加到上下文对象的所有内容。
这就是上下文处理器的用途,例如参见 ***.com/questions/2893724/… 或 ***.com/questions/2246725/… - 特别是 Django 将 user
对象添加到请求中的方式,如果需要,您可以自己编写比内置提供的更多。
【参考方案1】:
您可以编写自己的上下文处理器:
学习:https://docs.djangoproject.com/en/dev/ref/templates/api/#writing-your-own-context-processorshttp://www.b-list.org/weblog/2006/jun/14/django-tips-template-context-processors/
【讨论】:
这个。拥有自己的上下文处理器具有强大的功能,它极大地简化了将各种“全局状态”传递到模板中的过程。 不错,确实很强大【参考方案2】:如果我正确理解您的问题,我认为您正在尝试做这样的事情。我自己对 Django 还很缺乏经验,所以对此持保留态度。
基本示例:
views.py
from django.shortcuts import render
from exampleapp.models import User # User object defined in your models.py
def index(request):
context = 'users': User.objects.all()
return render(request, 'exampleapp/example.html', context)
example.html
% if users %
% for user in users %
<p> user.name </p>
% endfor %
% else %
<p>No users.</p>
% endif %
如果我错过了您的问题,我深表歉意。
【讨论】:
我找到了这个。谢谢!以上是关于您将如何在 django 中设置“上下文”类型的对象的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot Tests 中设置 servlet 上下文路径?