您将如何在 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 中设置“上下文”类型的对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在上下文文件中设置连接池?

在 Django 1.5/1.6 中设置两种不同类型的用户

如何在android的片段中设置应用程序上下文?

如何在 Spring Boot Tests 中设置 servlet 上下文路径?

如何通过浏览器的语言在 Sitecore 中设置上下文语言?

如何刷新我在 ServletContextListener 中设置的 servlet 上下文变量?