2010-10-31 78 views
2

我最近開始在Django中編寫代碼,所以也許我的問題有點奇怪。 最近我需要將模型中的CharField字段渲染爲html中的簡單靜態文本,但我發現它似乎並非如此簡單,因爲我能想到,或者我做錯了什麼......如何將CharField轉換爲Django中的靜態文本?

我有這樣的模式:

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) 

它Form類是:

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

    class Meta: 
     model = Tag 

在視圖中創建該formset多以單獨的形式Tag對象與提供TagForm CLA SS每個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中,我只需要顯示它們)。這種情況有沒有快速解決方案?

回答

0

將字段呈現爲只讀狀態(因此瀏覽器拒絕修改數據)可能就足夠了,請參閱this question

+0

嗨馬丁,謝謝你的回答。是的,我之前嘗試過這種解決方案,但實際上這種方式編輯框已禁用,但在文本週圍仍可見。我的目標是徹底刪除這個編輯框,並離開那裏只是純文本,而不是它,但這一個我不知道如何實現... – surry 2010-10-31 16:50:40

0

如果您絕對只想渲染文本,您需要定義一個自定義小部件,然後將表單字段映射到此小部件。在小部件的render()方法中,只輸出字段值。

0

如果你不想輸入字段,你爲什麼要使用Django的窗體?

你也可以給模板添加一個對象列表,並以你喜歡的方式渲染對象字段。

2

在窗體的元類,添加以下刪除領域

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

然後用

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

也會顯示在你的模板中的數值,選擇參數應該傳遞給類別模型領域;這樣你就不需要明確定義表單中的字段。

相關問題