如何使用Django获取当前url名称?
我必须根据当前url动态构建url。使用如何使用Django获取当前url名称?,django,django-urls,urlconf,Django,Django Urls,Urlconf,我必须根据当前url动态构建url。使用{%url%}标记是最简单的方法,但是我需要当前的url名称来动态生成新的url 如何将url名称附加到导致当前视图的urlconf 编辑:我知道我可以使用get_absolute\u url手工制作url,但我宁愿避免使用它,因为这是讲座的一部分,我只想演示一种构建url的方法 学生们知道如何使用{%url%}。当他们必须基于当前url生成一个更完整的url时,他们知道自己面临一个问题。最简单的方法是再次使用{%url%},但有一些变化。由于我们已经命名
{%url%}
标记是最简单的方法,但是我需要当前的url名称来动态生成新的url
如何将url名称附加到导致当前视图的urlconf
编辑:我知道我可以使用get_absolute\u url
手工制作url,但我宁愿避免使用它,因为这是讲座的一部分,我只想演示一种构建url的方法
学生们知道如何使用{%url%}
。当他们必须基于当前url生成一个更完整的url时,他们知道自己面临一个问题。最简单的方法是再次使用{%url%}
,但有一些变化。由于我们已经命名了url,我们需要知道如何获取调用当前视图的url的名称。
编辑2:另一个用例是根据基础模板不同地显示基础模板的部分。还有其他方法可以做到这一点(使用CSS和{%block%},但有时如果viewname与链接匹配,则能够删除base.html菜单项的标记就很好了。您的问题有点不清楚,但可能会解释您的目的 注意Django如何处理请求特别有用: 当用户从Django支持的站点请求页面时,系统将按照以下算法确定要执行的Python代码:
我希望这会有所帮助——它指明了如何使用URLconf模块,并希望能帮助您找到正确的方向。对问题的澄清:“从某种角度来看,假设正好有一个这样的urlpattern,您如何获得指向它的URLPern的名称。” 出于以下原因,这可能是可取的:在视图中,我们希望以一种干燥的方式获得指向同一视图的url(我们不想知道自己的urlpattern名称) 简短的回答:教你的课还不够简单,但对你来说在一两个小时内完成并在GitHub上呕吐可能是一件有趣的事情 如果您真的想这样做,您必须将regexurlsolver子类化,并修改resolve方法以返回匹配的模式(从中可以获得模式名称),而不是视图和关键字/值对。 然后,您可以创建一个装饰器,或者更合适的中间件,使用这个子类来获取模式名,并将该值存储在请求中的某个位置,以便视图可以使用它 如果你真的想这样做,并且遇到了一些麻烦,请告诉我,我可能会提供帮助 对于您的类,我会让他们在视图或模板中硬编码模式名称。我相信这是可以接受的方法 更新:
对此我想得越多,我就越不鼓励尝试在视图中获取urlpattern名称。urlpattern参数与它们指向的视图的参数相当独立。如果要指向某个url,您需要知道urlpattern如何工作,而不仅仅是视图如何工作。如果您需要知道urlpattern如何工作,请您可能还需要知道urlpattern的名称。我不知道该功能作为Django的一部分有多长时间了,但如图所示,它可以在视图中实现如下:
from django.core.urlresolvers import resolve
current_url = resolve(request.path_info).url_name
如果您在每个模板中都需要它,那么编写模板请求是合适的
编辑:应用新的DJANGO更新
在当前Django更新之后:
Django 1.10
中不推荐从django.core.urlResolver
模块导入
支持它的新位置,django.url
Django 2.0
删除了django.core.urlResolver
模块,以支持其新功能
位置,django.url
因此,正确的做法是:
from django.urls import resolve
current_url = resolve(request.path_info).url_name
从Django 1.5开始,可以从请求对象访问它
current_url = request.resolver_match.url_name
如果希望url名称与命名空间一起使用
current_url = request.resolver_match.view_name
这可以通过以下方式实现:
request.resolver_match.url_name
Django>1.8对于那些为其url模式命名的人,那么您可能对请求的命名url名称感兴趣。在本例中,Django将其称为
view\u name
request.resolver_match.view_name
# return: <namespace>:<url name>
request.resolver\u match.view\u name
#返回::
只需尝试请求.路径
。这将获得请求的当前路径。谢谢,但我知道:-)我添加了一些解释以避免误解。我在搜索通过模板标记输出当前绝对url的方法时不断发现这个问题。。。如果你也在寻找它,它是:{{request.get\u full\u path}
+1这并没有回答问题,但解决了其中提出的一个问题。为什么?据我所知,你的问题的一个关键部分是如何实现“既然我们已经命名了url,我们需要知道如何获取调用当前视图的url的名称。”…实际上,卢卡斯那天我脾气暴躁,并且