按用户名搜索用户并重定向到 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 中的当前页面

Django 会话表单(临时保存表单)

检查身份验证状态并重定向用户

Firebase Facebook 登录 - 检测用户登录状态并重定向

用户登录并重定向到主页后,如何在主页导航栏中隐藏登录链接并显示注销链接?