是否可以通过 Django 的{% url% }模板标记传递查询参数?

我想将请求参数添加到 {% url %}标记,如 ?office=foobar

这可能吗,我在上面什么都找不到。

90387 次浏览

不,因为 GET 参数不是 URL 的一部分。

简单地把它们加到最后:

<a href="{% url myview %}?office=foobar">

对于 Django 1.5 +

<a href="{% url 'myview' %}?office=foobar">

首先,一个愚蠢的回答:

{% url my-view-name %}?office=foobar

一个严肃的回答: 不,你不能。Django 的 URL 解析器只匹配 URL 的 路径部分,因此 {% url %}标记只能反转 URL 的该部分。

一种混淆电流参数和新参数的方法:

{% url 'order_list' %}?office=foobar&\{\{ request.GET.urlencode }}

将您的设置修改为具有请求变量:

from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP


TEMPLATE_CONTEXT_PROCESSORS = TCP + (
'django.core.context_processors.request',
)

如果参数是变量,则使用 urlencode

<a href="{% url 'myview' %}?office=\{\{ some_var | urlencode }}">

否则像空格这样的特殊字符可能会破坏 URL。

文件: https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#urlencode

试试这个:

{% url 'myview' office=foobar %}

它对我很有效,它基本上是对链接进行反向操作,并应用给定的参数。

如果您的 url (和视图)包含变量 office,那么您可以这样传递它:

{% url 'some-url-name' foobar %}

或者像这样,如果有多个参数:

{% url 'some-url-name' office='foobar' %}

文件: https://docs.djangoproject.com/en/3.1/ref/templates/builtins/#url

都试过了,都没用。
我的系统有:

  • Python 3.8.10
  • Python3-m django ——版本4.0.3

以下是对我有效的方法:
Py < br >

urlpatterns = [
path('', views.index, name='index'),
path('single/', views.single, name='single'),
]

视野,视野

def single(request):
url = request.GET.get('url')
return HttpResponse(url)

从. html 文件调用

<a href={% url 'single' %}?url=\{\{url}} target="_self">

浏览器网址

http://127.0.0.1:8000/newsblog/single/?url=https://www.cnn.com/2022/08/16/politics/liz-cheney-wyoming-alaska-primaries/index.html

Output