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

5

有人知道如何从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/”?
谢谢
2个回答

4

根据django文档:

HttpRequest.resolver_match

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

ResolverMatch对象中有url_name属性:

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

对于django版本小于1.5,这里有一个答案:如何使用Django获取当前的URL名称?


谢谢,你知道如何在context_processor.py中进行重定向吗?它不起作用。 - Marcos Aguayo
@MarcosAguayo 嗯,我不知道为什么你想在上下文处理器中重定向而不是视图中? - ndpu
我想检查用户是否已经批准了评估,如果没有,就重定向到该页面。我有20个页面,我正在尝试避免重复代码。 - Marcos Aguayo
1
@MarcosAguayo 重定向中间件的示例:https://github.com/redsolution/django-redirect-middleware/blob/master/redirects/middleware.py - ndpu

1
如果使用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}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接