How do I construct a Django reverse/url using query args?

后端 未结 6 460
长发绾君心
长发绾君心 2020-12-13 04:25

I have URLs like http://example.com/depict?smiles=CO&width=200&height=200 (and with several other optional arguments)

My urls.py contains:

ur         


        
6条回答
  •  伪装坚强ぢ
    2020-12-13 04:42

    Building an url with query string by string concatenation as suggested by some answers is as bad idea as building SQL queries by string concatenation. It is complicated, unelegant and especially dangerous with a user provided (untrusted) input. Unfortunately Django does not offer an easy possibility to pass query parameters to the reverse function.

    Python standard urllib however provides the desired query string encoding functionality.

    In my application I've created a helper function:

    def url_with_querystring(path, **kwargs):
        return path + '?' + urllib.urlencode(kwargs) # for Python 3, use urllib.parse.urlencode instead
    

    Then I call it in the view as follows:

    quick_add_order_url = url_with_querystring(reverse(order_add),
        responsible=employee.id, scheduled_for=datetime.date.today(),
        subject='hello world!')
    # http://localhost/myapp/order/add/?responsible=5&
    #     scheduled_for=2011-03-17&subject=hello+world%21
    

    Please note the proper encoding of special characters like space and exclamation mark!

提交回复
热议问题