Python Django 1.6 OrderedDict在请求之间的保留状态?默认情况下是否启用缓存?
我正在使用django 1.6.0。我正在开发一个带有客户端“仪表板”的web应用程序。在客户端仪表板中,基本模板的标题中有选项卡。选项卡是动态的,并根据查看仪表板的用户的角色/权限进行更改 所有视图都是使用基于类的视图编写的。所有仪表板视图都继承自父mixin视图,该视图确保登录用户具有查看其请求查看的对象的权限,并基于其用户角色构建仪表板选项卡Python Django 1.6 OrderedDict在请求之间的保留状态?默认情况下是否启用缓存?,python,django,Python,Django,我正在使用django 1.6.0。我正在开发一个带有客户端“仪表板”的web应用程序。在客户端仪表板中,基本模板的标题中有选项卡。选项卡是动态的,并根据查看仪表板的用户的角色/权限进行更改 所有视图都是使用基于类的视图编写的。所有仪表板视图都继承自父mixin视图,该视图确保登录用户具有查看其请求查看的对象的权限,并基于其用户角色构建仪表板选项卡 class ParentMixin(object): pages = OrderedDict([ ('General': { 'link
class ParentMixin(object):
pages = OrderedDict([
('General': { 'link': build_a_link_for_the_logged_in_user()}),
])
def dispatch(self, *args, **kwargs):
# validate that logged in user has permission to view requested objects
if user_passes_test(self.request.user):
self.object = get_users_object_to_view(self.request.user)
def get_context_data(self, **kwargs):
if self.request.is_superuser and self.object.is_demo:
self.pages['Superuser'] = {'link': build_link()}
context = super(parent_get_context_data)
context['pages'] = self.pages
然后,在所有仪表板视图继承自的基础模板中,将显示动态选项卡/链接:
{% for page_name, page_data in pages.items %}
{% if page_data.is_current %}
<a href="{{ page_data.link }}" class="current">
{% else %}
<a href="{{ page_data.link }}">
{% endif %}
{{ page_name }}
</a>
{% endfor %}
谢谢你,这正是你告诉它的。您已经将
pages
设置为ParentMixin的class属性,这意味着它也将是您将其混合到的任何视图类的class属性。类属性在一个进程内的所有类实例之间共享,并且由于一个进程在多个请求之间持续,因此数据将在这些请求之间持续存在
您应该始终在self
上设置属性,这意味着在方法中执行此操作,在这种情况下可能在get\u context\u data
中执行。Django做了一些努力,以确保实例数据不在基于类的视图中共享,但这不适用于类级数据
if 'Superuser' in self.pages:
del(self.pages['Superuser'])