从完整路径获取反向 URL 名称

Posted

技术标签:

【中文标题】从完整路径获取反向 URL 名称【英文标题】:Get reverse URL name from full path 【发布时间】:2014-04-02 15:48:18 【问题描述】:

有谁知道我如何从 request.get_full_path() 中获取 URL 名称?

例如:

我在 urls.py 中有这个 URL

url(r'^evaluation-active/$', 'web.evaluation.evaluation', name='evaluation'),

在我的 context_processor.py 中:

def is_evaluation(request):
    return "test":request.get_full_path()

如何返回“evaluation”而不是“/evaluation-active/”?

谢谢

【问题讨论】:

【参考方案1】:

来自 django docs:

HttpRequest.resolver_match

Django 1.5 中的新功能。 ResolverMatch 的一个实例,表示 解析的网址。此属性仅在 url 解析完成后设置 place,这意味着它在所有视图中都可用,但在中间件中不可用 在 url 解析发生之前执行的方法(比如 process_request,你可以使用 process_view 代替)。

ResolverMatch 对象中有url_name 属性:

def is_evaluation(request):
    return "test": request.resolver_match.url_name

对于 How to get the current urlname using Django?

【讨论】:

谢谢,你知道如何在 context_processor.py 中重定向吗?它不起作用 @MarcosAguayo 嗯,我不知道,你为什么要在上下文处理器而不是视图中重定向? 我想检查用户是否批准了评估,如果没有重定向到页面。我有 20 页,我尽量不重复代码。 @MarcosAguayo 重定向中间件示例:github.com/redsolution/django-redirect-middleware/blob/master/…【参考方案2】:

如果使用 django 1.5 或更高版本,请使用 request.resolver_match 获取 ResolverMatch 对象。

def is_evaluation(request):
    return "test":request.resolver_match.url_name

如果使用 1.5 之前的版本,则使用 resolve:

def is_evaluation(request):
    return "test":resolve(request.path_info).url_name

【讨论】:

以上是关于从完整路径获取反向 URL 名称的主要内容,如果未能解决你的问题,请参考以下文章

从完整文件路径获取文件夹名称

PHP 从名称或完整路径获取文件扩展名

从完整文件名路径获取文件夹名称

如何使用c#从google驱动器api获取文件夹的完整路径

从名称或完整路径获取文件扩展名

获取Golang中给定文件路径的目录名称(不是路径)