我正在使用Django 1.5。假设我有一个位于地址的视图:example.com/page/*value*
我将值传递给上下文中的模板。
我想要一个可以控制*value*
的复选框
例如,我转到example.com/page/5
然后复选框将如下所示:
我选择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>
答案 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;。模板中的渲染表单取决于您,也可以在选择更改时提交表单。