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

时间:2018-06-10 17:57:16

标签: html django django-templates italics

我在模型中有一个名为notes的字段。如果该字段为空,我想输出'没有备注'我想用斜体字来做。您可以将文字设置为“没有备注”。在models.py中使用get命令

def get_notes(self):
    if len(self.notes) == 0:
        return "No notes"
    return self.notes

如何将html呈现为文本的斜体'没有注释'。

HTML:

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

1 个答案:

答案 0 :(得分:2)

如果您呈现HTML

如果您呈现HTML,我会添加&#34;后备&#34;仅发送给模板的消息。您可以使用default 模板过滤器

执行此操作
{{ object.notes | default:"<i>No notes</i>" }}

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

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

如果是表单字段

我建议"No notes" CharField的内容。您如何从明确撰写"No notes"的用户那里榨取"No notes"?如果你以后改变主意怎么办?然后你必须重写表格中的所有逻辑等。但是你可以使用placeholder,并为此添加相关的标记:

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

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

input::placeholder {
    font-style: italic;
}

改为使用get_notes

如果您坚持使用get_notes,您可以先简化功能,此外,您可以使用 mark_safe(..) 来呈现原始 HTML:

from django.utils.safestring import mark_safe

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