【问题标题】:How to render CharField into static text in Django?如何在 Django 中将 CharField 呈现为静态文本?
【发布时间】:2011-05-03 01:39:03
【问题描述】:

我最近开始在 Django 中编写代码,所以我的问题可能有点奇怪。 最近我需要将模型中的 CharField 字段渲染为 html 中的简单静态文本,但我发现在这种情况下它似乎并不像我想象的那么简单,或者我做错了什么......

我有这个模型:

class Tag(models.Model):
    CATEGORIES = (
        (0, 'category0'),
        (1, 'category1'), 
        (2, 'category2'), 
        (3, 'category3'), 
        (4, 'category4'), 
        (5, 'category5'))
    name = models.CharField(max_length=20)
    description = models.CharField(max_length=100, blank=True)
    category = models.IntegerField(default=0)
    user = models.ForeignKey(User)

它的表单类是:

class TagForm(ModelForm):
    category = ChoiceField(choices=Tag.CATEGORIES)

    class Meta:
        model = Tag

在视图中,我在单个表单中创建包含多个 Tag 对象的表单集,并为其中的每个 Tag 对象提供 TagForm 类:

TagsFormSet = modelformset_factory(Tag,exclude=('user'),form=TagForm,extra=0)
form = TagsFormSet(queryset=all_tags)

在我的模板中:

{{ form.management_form }}   
{% for tagform in form.forms %}
{{ tagform }} 
<hr>
{% endfor %}

但是这种方式在 html 中,模型的“名称”和“描述”字段总是呈现为输入文本字段。我想把它们放在 html 中,就像普通的静态文本一样,没有任何东西(在那个 html 中我只需要显示它们)。这种情况有什么快速的解决方案吗?

【问题讨论】:

    标签: django django-forms django-templates


    【解决方案1】:

    在表单的元类中,添加以下内容以删除字段

    exclude = ('name', 'description'),
    

    然后在模板中显示值

    {{ tagform.instance.name }}
    {{ tagform.instance.description }}
    

    此外,choices 参数应该传递给类别模型字段;这样您就不需要在表单中明确定义字段。

    【讨论】:

      【解决方案2】:

      将字段呈现为只读可能就足够了(因此浏览器拒绝修改数据),请参阅this question

      【讨论】:

      • 嗨,马丁,感谢您的回答。是的,我之前尝试过这个解决方案,但实际上这种方式编辑框被禁用但仍然在文本周围可见。我的目标是完全删除这个编辑框,只留下纯文本而不是它,但是这个我不知道如何实现......
      【解决方案3】:

      如果您绝对只想呈现文本,则需要定义一个自定义小部件,然后将表单字段映射到此小部件。在小部件的 render() 方法中,只输出字段值。

      【讨论】:

        【解决方案4】:

        如果你不想要输入字段,为什么要使用 Django 的表单?

        您也可以只为模板提供一个对象列表,然后以任何您喜欢的方式呈现对象字段。

        【讨论】:

          猜你喜欢
          • 2017-08-23
          • 2011-10-17
          • 2011-07-26
          • 2018-04-14
          • 1970-01-01
          • 2021-10-28
          • 2012-01-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多