Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以从请求内部访问模块或视图类_Python_Django - Fatal编程技术网

Python 是否可以从请求内部访问模块或视图类

Python 是否可以从请求内部访问模块或视图类,python,django,Python,Django,我有一个带有上下文处理器的Django项目,每个页面上都有相同的对象。 到目前为止,它正在发挥作用 #/core/context_processor.py #(已在settings.py中正确链接) def默认值(请求): 上下文={'email':email()} 返回上下文 现在我想在每个Django模块中实现一个“TAG”常量。 我希望在每个视图上下文中都可以访问它,而不需要从每个视图类传递它 它应该类似于访问模板中的“{request.path}}”,但需要明确说明 #/home/vi

我有一个带有上下文处理器的Django项目,每个页面上都有相同的对象。 到目前为止,它正在发挥作用

#/core/context_processor.py
#(已在settings.py中正确链接)
def默认值(请求):
上下文={'email':email()}
返回上下文
现在我想在每个Django模块中实现一个“TAG”常量。 我希望在每个视图上下文中都可以访问它,而不需要从每个视图类传递它

它应该类似于访问模板中的“{request.path}}”,但需要明确说明

#/home/views.py
TAG=“TagOfHome”
类HomeView(TemplateView):
模板名称='home/list.html'
#/addresses/views.py
TAG=“tagof地址”
类地址视图(TemplateView):
模板名称='address/list.html'
现在我想从每个模板的内部访问标记常量

如果是地址模块视图,则应为“TagOfAddresses”,在home视图中应为“TagOfHome”等

我怎样才能做到这一点? 我可以从上下文处理器(请求)中以某种方式访问标记吗


编辑:

多亏了@grrrr,我可以使用“request.resolver\u match”解决它。 但我不想在一个模块中包含“配置内容”。 因此,我在settings.py中创建了一个dict:

标记={
'核心':'家',
“地址簿”:“地址”,
“文件”:“文件”
}
#/core/context_processor.py
从config.settings导入标记
def默认值(请求):
上下文={'email':email()}
...
module=request.resolver\u match.func.view\u class.\u\u module\u.split('.')[0]
上下文['tag']=TAGS.get(模块'default')
返回上下文
您可以使用户获取应用程序名称以及有关请求解析url的其他元数据

例如,在模板中,您可以使用
{{request.resolver\u match.app\u name}
或自定义上下文处理器中的行为以返回
标记

def default(request):
    context = {'email': Email()}
    if request.resolver_match.app_name == 'home':
        context['TAG'] = 'TagOfHome'
    elif ...
    return context

这听起来像是XY问题。创建一个mixin类,将其添加到所有视图中。假设所有视图都来自
视图
(这是
模板视图
所做的),您可以覆盖mixin中的
dispatch()
方法,首先将
标记
属性添加到
请求
,然后调用
super().dispatch()
。这样,您的请求将在上下文处理器中具有
标记
属性。@Frank:@dirkgroten:如果我只问“如何创建一个自动传输到此模块的cbv模板上下文的模块相关常量?”这样的问题,我是否可以避免这个xy问题,这是关于您试图通过(基本)模板中的标记实现什么。我不确定你问错了问题,但@dfundako想说的是,也许有一条完全不同的路线来实现你想要的。