如何将具有某些字符的字符串呈现为输入标记的值?

问题描述 投票:0回答:1

我将一个类别名称数组传递给我的模板,并通过迭代来填充复选框元素的值。

<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的默认值,我无法弄清楚如何禁用它。

任何有关这方面的帮助将非常感激。

html django django-templates
1个回答
1
投票

这是我的答案,我知道这个答案对你不好:你应该学习更多关于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 &amp; Gaming
    </label>
  </li>...'
© www.soinside.com 2019 - 2024. All rights reserved.