То, что вы здесь описываете, это строка запроса . Строки запроса не обрабатываются URL-адресами Django. Однако вы можете получить доступ к данным строки запроса через request.GET
в представлении на основе функций или self.request.GET
в представлении на основе классов.
request.GET
является QueryDict
. Он действует как словарь (за исключением того, что он является неизменным, и, кроме того, ключ может отображаться на несколько значений).
Таким образом, вы можете получить значение для tool_one
с помощью self.request.GET['tool_one']
(так же, как вы бы запрашивали словарь).
Поскольку это не часть URL-адресов Django, файл urls.py
выглядит следующим образом:
# app/urls.py
urlpatterns = [
url(r'^tools/$', views.ToolsViews.as_view(), name='tools'),
]
В представлении вы можете, например, использовать это для фильтрации, например:
class ToolsViews(ListView):
model=Tool
def get_queryset(self):
if 'tool_one' in <b>self.request.GET</b>:
return Tool.objects.filter(one=<b>self.request.GET['tool_one']</b>)
return Tool.objects.all()
Наконец, вы можете создавать такие URL в шаблонах с помощью:
<a href="{% url 'tools' %}<b>?tool_one=foo</b>">Link</a>
Или написав <form>
методом "get"
:
<form action="{% url 'tools' %}" <b>method="get"</b>>
Tool one: <input type="text" <b>name="tool_one"</b>><br>
<input type="submit" value="Submit">
</form>
Такая форма с method="get"
затем преобразует значение в текстовом поле в строку запроса.