Django, лучший способ сделать курсив в HTML для пустого текстового поля - PullRequest
0 голосов
/ 10 июня 2018

У меня есть поле с именем notes в модели.Если поле пустое, я хочу вывести «Нет заметок» и сделать это курсивом.Вы можете установить текст как «Без заметок», используя команду get в models.py

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 голосов
/ 10 июня 2018

В случае, если вы визуализируете HTML

В случае, если вы визуализируете HTML, я бы добавил сообщение «отступление» только в шаблон.Вы можете сделать это с помощью 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(..) для рендеринга raw 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>
...