Django技术问题:如何从request对象获取URL视图名称?
在Django视图中获取当前请求对应的URL视图名称
要从request对象中拿到当前请求对应的视图名称,有两种可靠的方法:
1. 直接使用request.resolver_match(推荐,Django 1.5+)
Django 1.5及以上版本中,request对象自带resolver_match属性,里面包含了URL解析后的匹配数据,其中view_name字段就是我们需要的视图名称。在视图函数里直接调用即可:
def my_view(request): current_view = request.resolver_match.view_name # 示例:用获取到的视图名称做重定向 # return redirect(current_view)
类视图中同样适用,通过self.request.resolver_match.view_name就能获取。
2. 兼容旧版本的反向解析方式(Django < 1.5)
如果你的项目还在使用Django 1.5之前的版本,可以通过resolve()函数结合请求路径来获取:
from django.core.urlresolvers import resolve def my_view(request): match_obj = resolve(request.path) current_view = match_obj.view_name
关键注意点
- 当URL配置使用了命名空间(比如通过
include导入带命名空间的URLconf),view_name会返回命名空间:视图名的格式(例如blog:post_list),重定向时需要完整使用这个名称。 - 如果请求没有匹配到任何有效视图(比如404场景),
resolver_match可能为None,实际使用前建议先做非空判断,避免报错。
内容的提问来源于stack exchange,提问作者Todd Ditchendorf
相关产品推荐
相关产品推荐

