request.build_absolute_uri()返回我url/path/?q1=v1&q2=v2...,但是,我需要相同的绝对uri,不带查询参数q1=v1&q2=v2
request.build_absolute_uri()
url/path/?q1=v1&q2=v2...
q1=v1&q2=v2
x0fgdtte1#
build_absolute_uri方法有一个可选的location。如果没有提供location,它将使用包含查询字符串的get_full_path()。您可以传递request.path(不包含查询字符串)作为位置。
build_absolute_uri
location
get_full_path()
request.path
request.build_absolute_uri(request.path)
0pizxfdo2#
展开,如果你想从模板中完成它,这是如何通过编写一个简单的标签来完成它:1.在settings.py中,将以下内容添加到TEMPLATE['OPTIONS']:
settings.py
TEMPLATE['OPTIONS']
'libraries': { 'common_extras': 'your_project.templatetags.common_extras', },
1.然后,创建your_project/templatetags/common_extras.py并添加以下内容:
your_project/templatetags/common_extras.py
from django import template register = template.Library() @register.simple_tag(takes_context=True) def clean_url(context): request = context['request'] return request.build_absolute_uri(request.path)
1.最后,在模板中,您只需执行以下操作:
{% load common_extras %} ... <meta property="og:url" content="{% clean_url %}"> ... <meta property="twitter:url" content="{% clean_url %}">
j9per5c43#
如果你想获取整个绝对url,但不需要params,你可以使用请求对象上的其他属性并将它们组合起来(scheme,get_host和path)。它可以在模板中使用:
{{ request.scheme }}://{{ request.get_host }}{{ request.path }}
3条答案
按热度按时间x0fgdtte1#
build_absolute_uri
方法有一个可选的location
。如果没有提供location
,它将使用包含查询字符串的get_full_path()
。您可以传递request.path
(不包含查询字符串)作为位置。0pizxfdo2#
展开,如果你想从模板中完成它,这是如何通过编写一个简单的标签来完成它:
1.在
settings.py
中,将以下内容添加到TEMPLATE['OPTIONS']
:1.然后,创建
your_project/templatetags/common_extras.py
并添加以下内容:1.最后,在模板中,您只需执行以下操作:
j9per5c43#
如果你想获取整个绝对url,但不需要params,你可以使用请求对象上的其他属性并将它们组合起来(scheme,get_host和path)。它可以在模板中使用: