按用户名搜索用户并重定向到Django中的用户页面

时间:2014-02-22 19:57:26

标签: django django-forms django-templates django-urls

我正在开发一个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 个答案:

答案 0 :(得分:1)

您无法在网址中传递表单的结果。表单将作为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,因为您不是在更改数据库中的信息,而只是要求查看某些内容)。