使用表单在 django 模板中传递 url 参数

Posted

技术标签:

【中文标题】使用表单在 django 模板中传递 url 参数【英文标题】:passing url parameter in django template using form 【发布时间】:2019-06-25 21:04:45 【问题描述】:

我正在编写一个带有 id 并找到与该 id 匹配的用户的页面。 这是我在 urls.py 中编写的 URL 模式:

re_path(r'^users/id=(?P<username>[0-9]9)$' , views.usershow , name = 'usershow') ,

我想使用表单传递用户名,所以我在 templates 中写了这个:

<form action="% url 'CMS:usershow' %" method="GET" >
% csrf_token %
<input name="id" type="number" placeholder="search">
<button type="submit">find</button>
</form>

但它显示了这个错误

Reverse for 'usershow' with no arguments not found. 1 pattern(s) tried: ['dashboard/users/id=(?P<username>[0-9]9)$']

如何使用具有此 URL 模式的表单传递它?

【问题讨论】:

当你的表单方法是GET时,你真的必须通过% csrf_token %吗?我认为不会。 @HassanBaig 没有。在此之前我尝试过 post 方法,但我忘记删除了 【参考方案1】:

这不是表单的工作方式。从模式中删除用户名:

path(r'^users/' , views.usershow , name = 'usershow') ,

并在视图中从请求中获取值;

username = request.GET["id"]

【讨论】:

【参考方案2】:

首先,确保 CMS 应用的 urls.py 具有路径。

其次,传递user id值如下图:

<form action="% url 'CMS:usershow' user_id %" method="GET" >

参考号:https://docs.djangoproject.com/en/2.1/topics/http/urls/#s-reverse-resolution-of-urls

【讨论】:

但我想用户输入用户名。

以上是关于使用表单在 django 模板中传递 url 参数的主要内容,如果未能解决你的问题,请参考以下文章

Django:引用模板中的url名称并传递参数

在 django 模板 URL 标签中传递参数

无论如何在 Django 的模板 url 函数中传递超过 2 个参数?

将 DJango 模板变量作为输入参数传递

Django:在 URL 模板标签中保留 GET 参数

Django 1.11 CreateView 传递 URL 参数