我将类别名称数组传递给模板,并以此进行迭代以填充复选框元素的值。
<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
阅读“娱乐与游戏and 'Business Expenses
如果我在值上添加safe
标记,则它将值名称呈现为“ Fun”和“ gaming”,而字符串的第二部分仍在值名称之外。
我曾尝试编写一个自定义标签来处理此行为,但似乎这是Django的默认设置,我不知道如何禁用它。
任何帮助,将不胜感激。
答案 0 :(得分:1)
这是我的答案,我知道这个答案对您不利:您应该进一步了解django和django形式:
用手处理和处理输入是一种反模式。正确的方法是创建一个Form对象并在模板中呈现表单。
您可以在Working with forms djag's documentation上了解表单。
让我在这里复制sample for checkboxe s:
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>...'