如何在Django中将CharField渲染为静态文本?

时间:2010-10-31 13:06:25

标签: django django-forms django-templates

我最近开始在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对象创建表单集,并为其中的每个TagForm对象提供Tag类:

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中,我只需要显示它们)。这种情况有没有快速解决方案?

4 个答案:

答案 0 :(得分:2)

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

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

然后使用

显示模板中的值
{{ tagform.instance.name }}
{{ tagform.instance.description }}

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您只想渲染文本,则需要定义自定义窗口小部件,然后将窗体域映射到此窗口小部件。在小部件的render()方法中,只输出字段值。

答案 3 :(得分:0)

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

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