e-s*_*tis 81 django django-urls urlconf
我必须根据当前的url动态构建一个url.使用{% url %}
标记是最简单的方法,但我需要当前的url名称来动态生成新的标记.
如何将url名称附加到导致当前视图的urlconf?
编辑:我知道我可以手动手工使用网址,get_absolute_url
但我宁愿避免它,因为它是一个讲座的一部分,我想只展示一种建立网址的方法.
学生知道如何使用{% url %}
.当他们必须基于当前的URL生成更完整的URL时,他们知道面临问题.最简单的方法是{% url %}
再次使用,有一些变化.由于我们已经命名了url,因此我们需要知道如何获取调用当前视图的url的名称.
编辑2:另一个用例是根据基本模板不同地显示基本模板的部分.还有其他方法可以做到这一点(使用CSS和{%block%},但有时如果视图名与链接匹配,则能够删除base.html菜单项的标记.
Luk*_*ger 114
我不知道这个功能已经成为Django的一部分,但正如下面的文章所示,它可以在视图中实现如下:
from django.core.urlresolvers import resolve
current_url = resolve(request.path_info).url_name
Run Code Online (Sandbox Code Playgroud)
如果您在每个模板中都需要它,那么编写模板请求可能是合适的.
编辑:应用新的DJANGO UPDATE
遵循当前的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
Run Code Online (Sandbox Code Playgroud)
Bha*_*aaj 104
从Django 1.5开始,可以从请求对象访问它
current_url = request.resolver_match.url_name
Run Code Online (Sandbox Code Playgroud)
https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.resolver_match
Yeo*_*Yeo 21
对于那些命名为url模式的人,您可能会对请求的命名空间URL名称感兴趣.在这种情况下,Django称之为view_name
.
request.resolver_match.view_name
# return: <namespace>:<url name>
Run Code Online (Sandbox Code Playgroud)
nie*_*odd 10
这可以通过以下方式实现:
request.resolver_match.url_name
Run Code Online (Sandbox Code Playgroud)
Django> 1.8
归档时间: |
|
查看次数: |
59311 次 |
最近记录: |