更改 GET url 的显示方式
Change how GET url is displayed
总结:如果我搜索 'apple',url 将是 http://127.0.0.1:8000/search_results?csrfmiddlewaretoken=rlUwb5Ju3Xr585FarH5eAGQJtpog83hqW4wRysbsMWM6eiO3prcKRONY28N118gR&query=apple&button=
,我只想知道是否有办法将其更改为更清晰的内容,例如 [=18] =]?
这是我的代码:
urls.py
path('search_results', views.search_results, name = 'search_results'),
html:
<form action="{% url 'search_results' %}" method="GET">
{% csrf_token %}
<input name = 'query' type = 'text'/>
<button type="submit" name="button">Search</button>
</form>
和views.py:
def search_results(request):
query =request.GET.get('query')
return HttpResponse(query)
我曾尝试在各自的文件中更改这 3 行:
`path('search_results/<str:query>')`, # thought this would achieve /search_results/apple url
<form action="{% url 'search_results' 'query' %}" method="GET">
def search_results(request, query):
但这没有用。有谁知道我怎样才能做到这一点?
GET 参数在 query string [wiki] 中编码。查询字符串是路径的 而不是 的一部分。因此无法以这种方式进行编码。但是您确实可以制作一个 "redirect view" 将其移动到路径。
您可以将重定向更改为:
# app/views.py
from django.shortcuts import redirect
def search_redir(request):
query =request.GET.get('query')
return <b>redirect('search_results', query=query)</b>
def search_results(request, query):
# …
pass
然后在您的 urls.py
中定义两个视图:一个将 "catch" 带有查询字符串的初始 GET 请求,另一个将查询移动到路径:
# app/urls.py
from django.urls import path
urlpatterns = [
path('search_results/', views.search_redir, name='search_redir'),
path('search_results/<str:query>/', views.search_results, name='search_results'),
]
但是在您的表单中,您仍然使用重定向视图。请注意,由于您执行的是 GET 请求,因此您不需要使用 {% csrf_token %}
:
<form action="{% url <b>'search_redir'</b> %}" method="GET">
<input name="query" type ="text"/>
<button type="submit" name="button">Search</button>
</form>
总结:如果我搜索 'apple',url 将是 http://127.0.0.1:8000/search_results?csrfmiddlewaretoken=rlUwb5Ju3Xr585FarH5eAGQJtpog83hqW4wRysbsMWM6eiO3prcKRONY28N118gR&query=apple&button=
,我只想知道是否有办法将其更改为更清晰的内容,例如 [=18] =]?
这是我的代码:
urls.py
path('search_results', views.search_results, name = 'search_results'),
html:
<form action="{% url 'search_results' %}" method="GET">
{% csrf_token %}
<input name = 'query' type = 'text'/>
<button type="submit" name="button">Search</button>
</form>
和views.py:
def search_results(request):
query =request.GET.get('query')
return HttpResponse(query)
我曾尝试在各自的文件中更改这 3 行:
`path('search_results/<str:query>')`, # thought this would achieve /search_results/apple url
<form action="{% url 'search_results' 'query' %}" method="GET">
def search_results(request, query):
但这没有用。有谁知道我怎样才能做到这一点?
GET 参数在 query string [wiki] 中编码。查询字符串是路径的 而不是 的一部分。因此无法以这种方式进行编码。但是您确实可以制作一个 "redirect view" 将其移动到路径。
您可以将重定向更改为:
# app/views.py
from django.shortcuts import redirect
def search_redir(request):
query =request.GET.get('query')
return <b>redirect('search_results', query=query)</b>
def search_results(request, query):
# …
pass
然后在您的 urls.py
中定义两个视图:一个将 "catch" 带有查询字符串的初始 GET 请求,另一个将查询移动到路径:
# app/urls.py
from django.urls import path
urlpatterns = [
path('search_results/', views.search_redir, name='search_redir'),
path('search_results/<str:query>/', views.search_results, name='search_results'),
]
但是在您的表单中,您仍然使用重定向视图。请注意,由于您执行的是 GET 请求,因此您不需要使用 {% csrf_token %}
:
<form action="{% url <b>'search_redir'</b> %}" method="GET">
<input name="query" type ="text"/>
<button type="submit" name="button">Search</button>
</form>