从完整路径获取反向 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 名称的主要内容,如果未能解决你的问题,请参考以下文章