【问题标题】:Django - Redirect User to a page based on selection from a drop down menuDjango - 根据下拉菜单中的选择将用户重定向到页面
【发布时间】:2014-08-05 19:56:09
【问题描述】:

我正在尝试使用 django 中的下拉菜单来允许用户从菜单中选择一个选项,然后导航到页面。

具体来说。我正在构建一个小型项目管理系统作为一个学习项目(我知道我在这里还有很多其他问题 - 我只想先让事情发挥作用,然后担心风格并删除不需要的变量)。我希望用户从下拉菜单中选择一个项目(我可以填充),然后导航到显示项目详细信息的页面。我目前通过点击链接来完成这项工作,但希望让用户可以选择现有项目并查看详细信息

html 表单应该将用户从 view_existing_projects 视图带到 view_project 视图。现在我可以找到转换视图,但 project_id 没有通过

urls.py

url(r'^view_project/(?P<project_id>\d+)/$', views.view_project, name='view_project'),

html表单

    <form method="POST" action="/view_project/{{ project.id }}"/>{% csrf_token %}
    <select name = "project_id">
    {% for project in projects %}
    <option value="{{ project.id }}" >{{ project.address1 }}</option>
    {% endfor %}
    </select>
<input type="submit"  value="View Details" />
    </form>

views.py

def view_existing_projects(request, user_id):
    context = RequestContext(request)
    user = User.objects.get(id=user_id)
    projects = ProjectSite.objects.filter(owner__id=user.id)
    args = {}
    args.update(csrf(request))
    args['users'] = user
    args['projects'] = projects
    if request.method == 'POST':
        project_id = request.POST.get('project_id')
        args['project_id']= project_id

        return redirect('/view_project/', args,context)
    else:
        args = {}
        args.update(csrf(request))
        args['users'] = user
        args['projects'] = projects
   return render_to_response('Bapp/manage_projects.html', args,context)


def view_project(request, project_id):
    context = RequestContext(request)
    user = User.objects.get(project_sites__id=project_id)
    site = ProjectSite.objects.get(id=project_id)
    args = {}
    args.update(csrf(request))
    args['Users'] = user
    args['Project'] = site
    return render_to_response('Bapp/view_project.html', args,context)

【问题讨论】:

  • 试试print request.POST.get('project_id') 你看到project_id了吗?顺便说一句,不要使用render_to_response,而是使用redirect。具有讽刺意味的是,您已经声明了一个变量 args 及其一个 dict (kwargs) :)
  • 感谢您的输入/建议 - 学习乐趣的一部分 - 我在打印时看到项目 id,我在重定向中交换了 - 我只是无法让 project_id 传递到下一个视图
  • 您是如何将redirect 与所需的网址一起使用的?
  • 我通过它'return redirect('/view_project/', args,context)' - 这让我进入正确的视图 - 只是没有通过项目 ID
  • 显示您的urls.py 文件内容

标签: django django-forms


【解决方案1】:

这应该可以解决您的问题:

from django.shortcuts import redirect
from django.core.urlresolvers import reverse

if request.method == 'POST':
    project_id = request.POST.get('project_id')
    return redirect(reverse('view_project', args=(project_id,)))

顺便说一句,另一个建议不是硬编码 URL 路径 Bapp/view_project.html,而是像我使用的那样使用 named URL patterns

【讨论】:

  • 确实如此 - 非常感谢。到目前为止,我今天承担的最困难的专业挑战是学习如何“编写”代码……
猜你喜欢
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
相关资源
最近更新 更多