Django - 模板表单复选框

时间:2015-09-15 15:07:05

标签: html django django-templates

我正在使用Django 1.5。假设我有一个位于地址的视图:example.com/page/*value*我将值传递给上下文中的模板。 我想要一个可以控制*value*的复选框 例如,我转到example.com/page/5 然后复选框将如下所示:

  • 0
  • 5(已选中)
  • 10

我选择10,点击按钮,它会将我重定向到/page/10

在AngularJS中,我有ng-model的价值而且它通常不是问题,但是Django做类似事情的方式是什么?

甚至可以通过Django模板和纯HTML,还是我必须编写一些javascript?

我目前将其作为下拉列表:

<ul class="dropdown-menu" aria-labelledby="dropdownMenu3">
  <li class="dropdown-header">Chosen: {{value}}</li>
  ...options...
</ul>

<select>也有效,但我不能理解如何默认显示值:

<select>
  <option value="0">0</option>
  <option value="5">5</option>
  <option value="10">10</option>
</select>

3 个答案:

答案 0 :(得分:2)

如果您手动渲染选择框,则只需添加selected属性

<select>
  <option value="0">0</option>
  <option value="5" selected>5</option>
  <option value="10">10</option>
</select>

在Django模板中,如果value位于模板上下文中,则可以使用if标记添加属性。

<select>
  <option value="0" {% if value == 0 %}selected{% endif %}>0</option>
  <option value="5" {% if value == 5 %}selected{% endif %}>5</option>
  <option value="10" {% if value == 10 %}selected{% endif %}>10</option>
</select>

但是,手动渲染模板通常是个坏主意。您应该考虑尽可能使用Django forms,因为它们有助于自动验证表单字段的输入和html呈现。

选择选项时重定向到新页面是JavaScript的任务,而不是Django。

答案 1 :(得分:1)

您可以尝试使用<select>,并可选择使用Django selected语法设置<option> {% ifequal a b %}参数:

<select>
  <option {% ifequal value 0 %} selected {% endifequal %}> 0 </option>
  <option {% ifequal value 5 %} selected {% endifequal %}> 5 </option>
  <option {% ifequal value 10 %} selected {% endifequal %}> 10 </option>
</select>

同样,您可以通过设置checked参数

来复选框
<input type='checkbox' {% ifequal value 0 %}checked{% endifequal %}> 0
....

答案 2 :(得分:0)

您也可以使用表单来完成任务,简单示例:

from django import forms

class SelectionForm(forms.Form):
    page = forms.ChoiceField(label="Your label", choices=((0, '0'), (5, '5'), (10, '10)) required=True)

您的观点:

from django.views.generic import FormView
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse

class SelectionView(FormView):
    form_class = SelectionForm
    template_name = "your/template.html"

    def get_initial(self):
        return {'page': self.kwargs['page']}

    def form_valid(self, form):

        return HttpResponseRedirect(reverse('selection-view', kwargs={'page': form.cleaned_data['page']})

在urls.py中,您的网址中应该有一个数字参数,名为&#39; page&#39;。模板中的渲染表单取决于您,也可以在选择更改时提交表单。