按用户名搜索用户并重定向到 Django 中的用户页面
Posted
技术标签:
【中文标题】按用户名搜索用户并重定向到 Django 中的用户页面【英文标题】:Search user by username and redirect to the user page in Django 【发布时间】:2014-03-24 11:02:39 【问题描述】:我正在处理一个 Django 项目,现在我正在构建一个搜索表单,我可以使用它通过他们的 id 来查找用户。 在搜索页面模板中,我有这个:
<form action="??" method="post">
% csrf_token %
<ul><p>User ID<input type="text" name="uid" size="20" maxlength="40"/>
<input type="submit" name="submit" value="Search" /></p></ul></form>
在views.py中:
def user_by_id(request, uid):
get_user_by_id = User.objects.get(pk=uid)
template = loader.get_template('user_search_result.html')
context = RequestContext(request,
'q1': get_user_by_id,
)
return HttpResponse(template.render(context))
现在我已经为用户准备了单独的页面,这些页面的 URL 为 /users/uid(pk)。我应该为我留下的模板中的表单操作选择什么?更多?另外,我需要在 urls.py 中写什么?
我的主要 urls.py 是:
url(r'^users/', include('users.urls', namespace="users"))
然后个人资料页面的 users/urls.py 是:
url(r'^(?P<uid>\d+)/$', views.profile_page, name='profile_page')
【问题讨论】:
【参考方案1】:您不能在 URL 中传递表单的结果。表单会将其作为 GET 或 POST 变量的一部分发送,因此您的视图需要从那里获取它,而不是从 URL 参数中获取。
所以,你的观点需要是:
def user_by_id(request):
uid = request.GET['uid']
...etc...
你的 urls.py 是
url(r'^user_by_id/$', user_by_id, name="user_by_id")
你的表格是:
<form action="% url 'user_by_id' %" method="GET">
(请注意,我已将方法从 POST 更改为 GET,因为您没有更改数据库中的信息,您只是请求查看某些内容)。
【讨论】:
嘿@daniel,谢谢你的回答。我收到了这个错误:NoReverseMatch at /users/search/ Reverse for 'user_by_id' with arguments '()' and keyword arguments '' not found.你知道我应该怎么做吗? 你的 urls.py 现在是什么样子的? 我使用 url(r'^user_by_id/$', user_by_id, name="user_by_id") 就像你评论的那样。 那是在你的主要 urls.py 中吗?您可能应该发布整个文件(在问题本身的编辑中)。 我刚做了。再次感谢。以上是关于按用户名搜索用户并重定向到 Django 中的用户页面的主要内容,如果未能解决你的问题,请参考以下文章
Django Createview根据外键的id保存表单并重定向到页面
wc_logout_url 没有确认并重定向到 Wordpress WooCommerce 中的当前页面