我必须根据当前URL动态构建一个URL。使用{% url %}标记是最简单的方法,但是我需要当前的URL名称来动态生成新的URL。
{% url %}
如何获取链接到指向当前视图的urlconf的url名称?
编辑:我知道我可以手动使用url,get_absolute_url但是我宁愿避免使用它,因为它是讲座的一部分,我只想演示一种构建url的方法。
get_absolute_url
学生知道如何使用{% url %}。他们知道当他们必须根据当前URL生成更完整的URL时遇到问题。最简单的方法是{% url %}再次使用,但要有所不同。由于已命名为url,因此我们需要知道如何获取调用当前视图的url的名称。
编辑2:另一个用例是根据基础模板不同地显示基础模板的各个部分。还有其他方法(使用CSS和{%block%},但有时如果视图名称与链接匹配,能够删除base.html菜单项的标签就很好了。
我不知道此功能已经成为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.core.urlresolvers
Django 2.0(链接)
该django.core.urlresolvers模块已被删除,以保留其新位置django.urls。
因此,正确的做法是这样的:
from django.urls import resolve current_url = resolve(request.path_info).url_name
从Django 1.5开始,可以从请求对象进行访问
current_url = request.resolver_match.url_name