Django,在 html 中为空文本字段呈现斜体的最佳方法

Django, best way to render italics in html for empty text field

我在模型中有一个名为 notes 的字段。如果该字段为空,我想输出 'No notes' 并且我想用斜体来做。您可以使用 models.py

中的 get 命令将文本设置为 'No Notes'
def get_notes(self):
    if len(self.notes) == 0:
        return "No notes"
    return self.notes

如何让 html 呈现为文本 'No notes' 的斜体。

Html:

<h6>Your Notes: </h6>
    <p>{{ object.get_notes }}</p>

如果你渲染 HTML

如果您呈现 HTML,我只会将 "fallback" 消息添加到模板。您可以使用 default 模板过滤器 :

{{ object.<b>notes | default:"<i>No notes</i>"</b> }}

这种用法的优点是 - 如果另一个模板应呈现另一条消息,或者斜体字不适合 - 您可以决定使用其他内容。此外,模板对于内容的呈现方式相当明确。

请注意,我们在这里使用 .notes,而不是添加某种占位符的 .get_notes 函数。

如果是表单域

我建议 "No notes" 而不是 CharField 的内容。您如何区分 "No notes" 与显式写入 "No notes" 的用户?如果你以后改变主意怎么办?然后你必须重写表单等中的所有逻辑。但是你可以使用 placeholder,并为此添加相关标记:

class SomeForm(forms.Form):
    notes = forms.CharField(
        label='notes', 
        widget=forms.TextInput(attrs={<b>'placeholder': 'No notes'</b>})
    )

然后您可以使用 .css 样式表执行标记:

input::<b>placeholder</b> {
    font-style: <b>italic</b>;
}

改用get_notes

如果你坚持使用get_notes,你可以先简化你的功能,然后你可以使用mark_safe(..)渲染原始 html:

<b>from django.utils.safestring import mark_safe</b>

def get_notes(self):
    return self.notes<b> or mark_safe('<i>No notes</i>')</b>