GET请求django方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GET请求django方式相关的知识,希望对你有一定的参考价值。

我正在玩Django并有以下问题。

我在一些模板中有一个搜索表单:

<form role="search" method="get" action="{% url 'polls:search' %}">
....
<form>

例如,它形成以下请求:

 http://127.0.0.1:8000/search/?text=dog&year=2017

view.py文件中的相应函数适用于此请求。

在其他模板的某些时候,我需要建立一个导致的链接

http://127.0.0.1:8000/search/?text=&year=2017

我做以下事情:

 <a href="{% url 'polls:search' %}?text=&year=2017">

它看起来有点难看,也许不正确。还有另外一种方法吗?

例如,是否可以以Django方式形成get请求:

http://127.0.0.1:8000/search/dog/2017

所以在另一个模板中,人们可以写

 <a href="{% url 'polls:search' %} text='' year=2017">
答案

在语义上,搜索术语应该是获取参数。您可以编写一个简单的模板标记,该标记采用关键字参数并使用QueryDict来处理正确的url编码:

# some_installed_app/templatetags/my_tags.py
from django.http import QueryDict
from django import template

register = template.Library()

@register.simple_tag
def querystring(**kwargs):
    d = QueryDict(mutable=True)
    d.update(kwargs)
    return d.urlencode()

在模板中,您可以执行以下操作:

# template.html
{% load my_tags %}
<a href="{% url 'polls:search' %}?{% querystring text='' year=2017 %}">
# http://127.0.0.1:8000/search/?text=&year=2017

它将能够正确处理尴尬的数据,例如:

...{% querystring text='foo bar' %}
# ...text=foo+bar

以上是关于GET请求django方式的主要内容,如果未能解决你的问题,请参考以下文章

Django回顾--获取请求参数的几种方式

django-内置装饰器

django HttpRequest对象

9.1 Web 框架 django

django-ajax post与get请求

django学习----http协议