一尘不染

如何使用Django获取当前网址名称?

django

我必须根据当前URL动态构建一个URL。使用{% url %}标记是最简单的方法,但是我需要当前的URL名称来动态生成新的URL。

如何获取链接到指向当前视图的urlconf的url名称?

编辑:我知道我可以手动使用url,get_absolute_url但是我宁愿避免使用它,因为它是讲座的一部分,我只想演示一种构建url的方法。

学生知道如何使用{% url %}。他们知道当他们必须根据当前URL生成更完整的URL时遇到问题。最简单的方法是{% url %}再次使用,但要有所不同。由于已命名为url,因此我们需要知道如何获取调用当前视图的url的名称。

编辑2:另一个用例是根据基础模板不同地显示基础模板的各个部分。还有其他方法(使用CSS和{%block%},但有时如果视图名称与链接匹配,能够删除base.html菜单项的标签就很好了。


阅读 752

收藏
2020-04-01

共2个答案

一尘不染

我不知道此功能已经成为Django的一部分了,但是正如下面的文章所示,可以通过以下方法实现该功能:

   from django.core.urlresolvers import resolve
   current_url = resolve(request.path_info).url_name

如果在每个模板中都需要,则编写模板请求可能是适当的。

编辑:应用新的DJANGO更新

在当前的Django更新之后:

Django 1.10(链接)

django.core.urlresolvers模块导入不建议使用,而应使用其新位置,django.urls

Django 2.0(链接)

django.core.urlresolvers模块已被删除,以保留其新位置django.urls。

因此,正确的做法是这样的:

from django.urls import resolve
current_url = resolve(request.path_info).url_name
2020-04-01
一尘不染

从Django 1.5开始,可以从请求对象进行访问

    current_url = request.resolver_match.url_name
2020-04-01