python - 如何使用 django 在 url 中添加问号?
问题描述
我有:
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=包
谁能给我一些提示?问题是什么?
解决方案
您在这里描述的是querystring。Django URL不处理查询字符串。但是,您可以通过request.GET
基于函数的视图或self.request.GET
基于类的视图访问查询字符串的数据。
request.GET
是一个QueryDict
。它就像一个字典(除了它是不可变的,而且一个键可以映射到多个值)。
因此,您可以获得tool_one
with的值self.request.GET['tool_one']
(与查询字典的方式相同)。
由于这不是 Django url 的一部分,因此该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 self.request.GET:
return Tool.objects.filter(one=self.request.GET['tool_one'])
return Tool.objects.all()
最后,您可以使用以下模板在模板中构建此类 URL:
<a href="{% url 'tools' %}?tool_one=foo">Link</a>
<form>
或者通过使用方法编写一个"get"
:
<form action="{% url 'tools' %}" method="get">
Tool one: <input type="text" name="tool_one"><br>
<input type="submit" value="Submit">
</form>
然后这种形式method="get"
会将文本框中的值转换为查询字符串。
推荐阅读
- text-to-speech - 为什么 SpeechSynthesisUtterance 不能在 Chrome 上运行
- c++ - c++中的多态——通过指针访问函数
- javascript - 使用 base64 了解文件或图像的大小
- wordpress - 通过另一门课程并获得一定结果后,我可以自动注册用户到 LearnDash 课程吗?
- django - 如何向两周内不活动的用户发送邮件
- npm - 如何使用 yarn 管理客户端依赖项?
- python - TensorFlow pycharm 中的 GPU 警告
- c# - 当高度绑定到 StackPanel 时,UserControl 中的文本框正在锁定应用程序
- python - 您如何通过 Flask 中的 Stripe Checkout 流程携带像 userID 这样的变量?
- java - 试图从arraylist打印信息,但我认为我正在获取内存