2

在我的 Django 代码中,我想实现以下流程:

  1. 提交Html表单后查看
  2. 重定向到包含下一个表单的同一 HTML 表单中的下一个选项卡。

到目前为止,这是我的代码:

def addnewroute(request):
 if request.method == "POST":
       # do needed

   render_to_response('useradd.html')
4

1 回答 1

0

介绍

选项卡通常是视觉 (UI) 元素;这意味着有CSS 样式将实际选项卡定义为“按下”或“按下”。选项卡如何“更改”由您选择的实现方法定义。让我们看看最简单的解决方案。

手动渲染(硬代码/多模板)

如果您更喜欢手动构建它,您可以添加一个条件来选择正确的 html 模板,该模板已经预先设置为按下的正确选项卡,并显示所需的内容。我不会推荐这种方法,除非更多地了解内部如何工作并作为概念证明。

def addnewroute(request):
    # ...
    if step1:
        return render_to_response('useradd-tab1.html')

    if step2:
        return render_to_response('useradd-tab2.html')

上下文/模板重用

如果您更喜欢重用大部分模板内容,您可以利用上下文字典参数将一个step变量(在“您现在应该是哪个选项卡”中定义)和一个content变量(包含选项卡内容或其他开关数据)传递到你的模板;这将根据达到的步骤而改变:

def addnewroute(request):
    # ...
    if step1:
        return render_to_response('useradd.html', {'step': 1, 'form': form1})

    if step2:
        return render_to_response('useradd.html', {'step': 2, 'form': form2})

然后,使用模板中传递的上下文变量来定义切换选项卡上的样式并显示相关表单的条件selected

<div id="tab1" class="tab{% if step1 %} selected{% endif %}">...</div>
{{ form.as_table }}

此方法与第一种方法非常相似,只是两个步骤都使用了相同的模板。

上述直接渲染实现的注意事项

以上方法可以完成你所问的;但是,有一些警告。首先,URL 保持不变,这意味着用户不能以持久的方式在步骤之间导航。其次,您必须编写(前端和后端)的“接线代码”数量将是一项真正的劳动。这就是为什么我会为“阶梯式”推荐以下实现之一的原因。

表单向导

Django (versions >= 1.4, < 1.8) 附带一个“可选的“表单向导”应用程序,可以将表单拆分到多个 Web 页面”Django 表单向导使用基于类的特殊WizardView视图来简化多步骤表单创建。注意:从 Django 1.8 开始,表单向导被移出django.contrib它自己的包django-formtools中。

Javascript

更复杂的解决方案可能涉及 Javascript 激活的选项卡,例如引导选项卡。在这种情况下,您必须:在同一模板中呈现所有表单(默认隐藏,可通过点击事件切换)或 b。异步获取表单的数据。这个解决方案的优点是用户界面感觉更直接,缺点肯定是更复杂。

更多帮助

如果您不熟悉 Django、模板、选项卡等,我建议您从头到尾实施上述解决方案,以更好地了解内部工作原理;然后,如何干燥和简化代码。

请注意,类似的问题已经在 SO 上被问过几次,例如这里这里这里。因此,如果您有更多麻烦,可以尝试搜索相关答案。

于 2015-05-22T21:28:07.060 回答