如何在Django模板中获取GET请求的值?

47
有没有一个简单的标签只是写一些HTTP GET查询参数是正确的吗? 如果只需要打印一个HTTP GET查询参数,例如?q=w,我可以直接使用模板标签中的值q,还是需要将值复制到请求处理程序中? 是否可以更直接地将所有值(所有值)从HTTP GET传递到模板中? 因为复制每个值似乎会重复相同的处理多次。
template_values = {'q':self.request.get('q'),...

可以尝试迭代参数集。你能推荐这个方法或其他解决方案吗?
2个回答

105
你完全不需要这样做。请求在模板上下文中自动可用(只要启用了request context processor并使用RequestContext)- 或者你可以直接将请求对象传递到上下文中。

request.GET是一个类似字典的对象,所以一旦你获取了请求对象,你可以直接在模板中获取GET值:

{{ request.GET.q }}

1
如何将其添加到if条件中? - Root
有没有办法在模板中添加可选的默认值?例如,request.GET.get("q", True)。 - Mike Stoddart
1
@Root 在检索值之前使用 {% if 'q' in request.GET %}。如果您想在q不存在时使用默认值,可以添加{% else %}标签。 - alstr
7
对于较新的 Django 版本(可能 > 2.0),这似乎是 {{ request.GET.urlencode }} - Markus

0
例如,如果您访问下面的URL:
https://example.com/?fruits=apple&meat=beef

然后,您可以在Django模板中按照下面的方式获取参数。*我的回答更详细地解释了这一点:
{# "index.html" #}

{{ request.GET.fruits }} {# apple #}
{{ request.GET.meat }} {# beef #}
{{ request.GET.dict }} {# {'fruits': 'apple', 'meat': 'beef'} #}
{{ request.META.QUERY_STRING }} {# fruits=apple&meat=beef #}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接