html - 在 render_to_response View 中打开特定选项卡的 Django 代码

标签 html django templates tabs render-to-response

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

  1. 提交Html表单后查看
  2. 重定向到包含下一个表单的相同 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 , herehere .所以如果你有任何问题,你可以try searching获取相关答案。

关于html - 在 render_to_response View 中打开特定选项卡的 Django 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27918986/

相关文章:

javascript - jquery animate() - 如何只移动/动画页面的一部分?

javascript - 音乐播放器 "easy"Div prob

javascript - 如何在angularjs中动态生成ng-option

javascript - 单击 angularjs 中的另一个元素时如何模拟单击一个元素

django - 在 Django-Registration 中通过注册保存配置文件

python - 如何在 django 1.8 中使用 Treebeard 管理

python - Django 分组依据

c++ - 使用模板类特化消除代码冗余的标准方法是什么?

c++ - 在 ';' 之前缺少 'template<'

c++ - 用于具有不同签名的函数的枚举切换器