Как добавить вопросительный знак в URL с помощью Django? - PullRequest
0 голосов
/ 30 августа 2018

у меня есть:

urlpatterns = [
    url(r'^tools(?:/tool_one=(?P<tool_one>\w+))?/?$', views.ToolsViews.as_view(), name='tools'),
]


печать URL, как это:

инструмент / tool_one = мешки


Я хочу добавить вопросительный знак к URL:

инструменты /? Tool_one = мешки


Я пытался написать:

urlpatterns = [
        url(r'^tools(?:/\?tool_one=(?P<tool_one>\w+))?/?$', views.ToolsViews.as_view(), name='tools'),
    ]

но вопросительный знак не существует, печать URL:

инструмент /% 3Ftool_one = мешки

Может кто-нибудь дать мне подсказку? В чем проблема?

1 Ответ

0 голосов
/ 30 августа 2018

То, что вы здесь описываете, это строка запроса . Строки запроса не обрабатываются 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" затем преобразует значение в текстовом поле в строку запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...