在我的 Django 代码中,我想实现以下流程:
- 提交Html表单后查看
- 重定向到包含下一个表单的相同 HTML 表单中的下一个选项卡。
到目前为止,这是我的代码:
def addnewroute(request):
if request.method == "POST":
# do needed
render_to_response('useradd.html')
最佳答案
介绍
选项卡通常是一个视觉 (UI) 元素;意思是有 CSS styles将实际选项卡定义为“按下”或“按下”。选项卡如何“更改”由您选择的实现方法定义。让我们看看最简单的解决方案。
手动渲染(硬代码/多模板)
如果您更喜欢手动构建它,您可以添加一个条件来选择正确的 html 模板,该模板已经预先设置为按下的正确选项卡,并显示所需的内容。我不推荐这种方法,除非是为了了解更多内部结构的工作原理以及作为概念证明。
def addnewroute(request):
# ...
if step1:
return render_to_response('useradd-tab1.html')
if step2:
return render_to_response('useradd-tab2.html')
上下文/模板重用
如果您希望重复使用大部分模板内容,您可以使用 context dictionary argument传递一个 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})
然后,使用模板中传递的上下文变量来定义 the condition在选项卡上切换 selected
样式并显示相关的 form .
<div id="tab1" class="tab{% if step1 %} selected{% endif %}">...</div>
{{ form.as_table }}
此方法与第一个方法非常相似,只是两个步骤都重复使用了相同的模板。
关于上述直接渲染实现的注意事项
以上方法可以完成你问的;但是,有一些注意事项。首先,URL 保持不变,这意味着用户无法以持久的方式在步骤之间导航。其次,您必须编写(前端和后端)的“接线代码”的数量将是一项真正的劳动。这就是为什么我会为“阶梯形式”推荐以下实现之一。
表单向导
Django(版本 >= 1.4,< 1.8)附带一个“可选的“表单向导”应用程序,可将表单拆分到多个网页”。 Django Form Wizard使用专门的 WizardView
基于类的 View 来简化多步骤表单创建。 注意:从 Django 1.8 开始,表单向导已从 django.contrib
移到 it's own package django-formtools
中。 .
Javascript
更复杂的解决方案可能涉及 Javascript 激活的选项卡,例如 bootstrap tabs .在这种情况下,您将不得不:在同一模板中呈现所有表单(默认情况下隐藏,可通过单击事件切换)或 b。异步获取表单的数据。该解决方案的优点是为用户提供更直接的 UI 感觉,缺点是更复杂。
更多帮助
如果您是 Django、模板、选项卡等方面的新手,我建议您从头到尾执行上述解决方案,以更好地理解内部结构的工作原理;然后,如何 DRY 和简化代码。
请注意类似的问题已经在 SO 上被问过几次,例如 here , here和 here .所以如果你有任何问题,你可以try searching获取相关答案。
关于html - 在 render_to_response View 中打开特定选项卡的 Django 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27918986/