我必须根据当前的url动态构建一个url。使用{% url %}
标记是最简单的方法,但我需要当前的url名称来动态生成新的url名称。
如何将url名称附加到指向当前视图的urlconf?
编辑:我知道我可以使用get_absolute_url
手工制作url,但我宁愿避免它,因为它是讲座的一部分,我只想演示一种构建url的方法。
学生们知道如何使用{% url %}
。当他们必须基于当前url生成更完整的url时,他们知道面临着一个问题。最简单的方法是再次使用{% url %}
,但有一些变化。由于我们已经将url命名为,因此我们需要知道如何获取调用当前视图的url的名称。
编辑2:另一个用例是根据基本模板不同地显示基本模板的各个部分。还有其他方法可以做到这一点(使用CSS和{% block %},但有时,如果视图名称与链接匹配,则能够删除base.html菜单项的标记是很好的。
发布于 2012-01-10 19:13:20
我不知道这个特性成为Django的一部分多久了,但正如following article所示,它可以在视图中实现如下所示:
from django.core.urlresolvers import resolve
current_url = resolve(request.path_info).url_name
如果您在每个模板中都需要它,那么编写一个模板请求可能是合适的。
编辑:应用新的DJANGO更新
在当前的Django更新之后:
Django 1.10 (link)
为支持其新位置django.urls
,不建议使用从django.core.urlresolvers
模块导入
Django 2.0 (link)
将删除
django.core.urlresolvers
模块,以支持其新位置django.urls
。
因此,正确的方法是这样做:
from django.urls import resolve
current_url = resolve(request.path_info).url_name
发布于 2013-07-12 19:37:15
从Django 1.5开始,可以从request对象访问它
current_url = request.resolver_match.url_name
如果您希望url名称与命名空间一起使用
current_url = request.resolver_match.view_name
https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.resolver_match
发布于 2016-07-02 03:42:08
对于那些命名空间为其url模式的用户,您可能会对请求的命名空间的url名称感兴趣。在本例中,Django将其命名为view_name
。
request.resolver_match.view_name
# return: <namespace>:<url name>
https://stackoverflow.com/questions/2491605
复制相似问题