如何在基于类的通用视图中访问 RequestContext?

Posted

技术标签:

【中文标题】如何在基于类的通用视图中访问 RequestContext?【英文标题】:How to access RequestContext in class-based generic views? 【发布时间】:2012-04-27 02:56:42 【问题描述】:

我的 urls.py 中有这条路径:

archive_index_dict = 
    'queryset': News.objects.filter(show=True),
    'date_field': 'date',
    'template_object_name': 'object_list',


...

url(r'^$', 'django.views.generic.date_based.archive_index',
        archive_index_dict, name='news_archive_index'
    ),

现在我想在模板中检测页面是否为当前页面(这是用于菜单样式)。 request.path request.get_full_path 在模板中都不起作用。

我应该改用什么?

解决方案

要在模板中获得request,我必须将django.core.context_processors.request 添加到TEMPLATE_CONTEXT_PROCESSORS。这不是默认设置的(从 django 1.3 开始)。

【问题讨论】:

您是否设置了django....request 上下文处理器?几乎所有 CBV 默认使用RequestContext 天啊,当然不是! :) 谢谢你的提示,我已经在设置中添加了'django.core.context_processors.request'request 现在可以在模板中使用。顺便说一句,你可以发表你的评论作为答案,我会投票给它。 【参考方案1】:

您是否设置了'django.core.context_processors.request' 上下文处理器?几乎所有 CBV 默认使用RequestContext

【讨论】:

您可以添加参考吗?喜欢提到此内容的文档/源代码的链接? 我认为这里的问题实际上是关于模板上下文的,与使用的视图无关。很抱歉造成混乱。 我深入研究了代码,似乎 CBV 实际上并没有生成上下文对象;然而,他们确实使用了 Template 类,该类使用 make_context 函数(如果它传递了请求)

以上是关于如何在基于类的通用视图中访问 RequestContext?的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何在函数视图中调用基于类的通用视图

如何根据 Django 中当前基于类的通用视图模型向模板加载器添加路径

基于 Django 类的通用视图和 ModelForms

手动调用基于类的通用视图

从 Django 中基于类的通用视图自定义表单变量的首选方法是啥?

从 Django 中基于类的通用视图将 request.user 对象发送到 ModelForm