【问题标题】:GET request the django wayGET请求django方式
【发布时间】:2017-12-16 08:01:31
【问题描述】:

我在玩 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">

【问题讨论】:

    标签: python django get search-form


    【解决方案1】:

    从语义上讲,搜索词应该是获取参数。您可以编写一个简单的模板标签,它接受关键字参数并使用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
    

    【讨论】:

      猜你喜欢
      • 2020-08-03
      • 2011-03-30
      • 2020-06-17
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 2015-12-07
      相关资源
      最近更新 更多