如何呈现带有某些字符的字符串作为输入标签的值?

时间:2019-02-18 12:26:26

标签: html django django-templates

我将类别名称数组传递给模板,并以此进行迭代以填充复选框元素的值。

<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的默认设置,我不知道如何禁用它。

任何帮助,将不胜感激。

1 个答案:

答案 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 &amp; Gaming
    </label>
  </li>...'