我将一个类别名称数组传递给我的模板,并通过迭代来填充复选框元素的值。
<input id={{"category"|add:escaped_cat_name}} type="checkbox" name="category" value={{category_name}}>
我的一些类别名称包含空格和&符号,但Django忽略了这些,因此“Fun&Gaming”变为“Fun”:
category_name: Fun & Gaming
<input id="categoryFun" type="checkbox name="category" value="Fun">
category_name: Business Expenses
<input id="categoryBusiness" type="checkbox name="category" value="Business">
在这些例子中,我想解释的value
阅读'Fun&Gamingand 'Business Expenses
如果我将safe
标记添加到该值,则会将值名称呈现为“Fun”&gaming,其中字符串的第二部分仍然在值名称之外。
我已经尝试编写自定义标记来处理这种行为,但似乎这是Django的默认值,我无法弄清楚如何禁用它。
任何有关这方面的帮助将非常感激。
这是我的答案,我知道这个答案对你不好:你应该学习更多关于django和django形式的知识:
手工处理和处理输入是一种反模式。正确的方法是创建一个Form对象并在模板中呈现表单。
您可以在Working with forms djag's documentation了解表格。
让我在这里复制一个sample for checkboxes:
from django import forms
BIRTH_YEAR_CHOICES = ('1980', '1981', '1982')
FAVORITE_COLORS_CHOICES = (
('blue', 'Blue'),
('green', 'Green'),
('black', 'Black'),
)
class SimpleForm(forms.Form):
birth_year = forms.DateField(
widget=forms.SelectDateWidget(years=BIRTH_YEAR_CHOICES))
favorite_colors = forms.MultipleChoiceField(
required=False,
widget=forms.CheckboxSelectMultiple,
choices=FAVORITE_COLORS_CHOICES,
)
那么,我们不必重新发明轮子,只需使用Forms。
对于您的数据:
>>> FAVORITE_COLORS_CHOICES = (
... ('categoryFun', 'Fun & Gaming'),
... ('categoryBusiness', 'Business Expenses'),
... )
>>>
>>> class SimpleForm(forms.Form):
... favorite_colors = forms.MultipleChoiceField(
... required=False,
... widget=forms.CheckboxSelectMultiple,
... choices=FAVORITE_COLORS_CHOICES,
... )
...
>>> str( SimpleForm() )
'<tr><th><label>Favorite colors:</label></th>
<td>
<ul id="id_favorite_colors">
<li>
<label for="id_favorite_colors_0">
<input type="checkbox" name="favorite_colors"
value="categoryFun" id="id_favorite_colors_0" />
Fun & Gaming
</label>
</li>...'