没有查询参数的django build_absolute_uri

nfg76nw0  于 2023-04-13  发布在  Go
关注(0)|答案(3)|浏览(138)

request.build_absolute_uri()返回我url/path/?q1=v1&q2=v2...,但是,我需要相同的绝对uri,不带查询参数q1=v1&q2=v2

x0fgdtte

x0fgdtte1#

build_absolute_uri方法有一个可选的location。如果没有提供location,它将使用包含查询字符串的get_full_path()。您可以传递request.path(不包含查询字符串)作为位置。

request.build_absolute_uri(request.path)
0pizxfdo

0pizxfdo2#

展开,如果你想从模板中完成它,这是如何通过编写一个简单的标签来完成它:
1.在settings.py中,将以下内容添加到TEMPLATE['OPTIONS']

'libraries': {
  'common_extras': 'your_project.templatetags.common_extras',
},

1.然后,创建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 %}">
j9per5c4

j9per5c43#

如果你想获取整个绝对url,但不需要params,你可以使用请求对象上的其他属性并将它们组合起来(scheme,get_host和path)。它可以在模板中使用:

{{ request.scheme }}://{{ request.get_host }}{{ request.path }}

相关问题