1

我有一个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>
4

1 回答 1

2

如果您呈现 HTML

如果您呈现 HTML,我只会将“回退”消息添加到模板中。您可以使用模板过滤器执行此操作: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>')
于 2018-06-10T18:07:20.903 回答