在django上设计和显示格式正确的数据。

时间:2018-06-18 05:16:40

标签: django database

我正在尝试为博客制作模型并尝试在我的模板中对其进行格式化。目前我在" Body"博客,它将包含所有内容,但每当我使用

将其嵌入我的模板时
{% for i in blog %}
    {{ i.body }}
{% endfor %}

现在,如果博客或图像或一段代码中有链接,我可以相应地对其进行格式化,因为列body内的所有数据都嵌入为一个大的字符串块。我试图改变我的模型 博客的正文和子标题各有10个TextFields。我也有不同的TextFields用于链接,这是最终模型的外观,有人可以告诉我这是否是正确的方法。

class Blog(models.Model):
    title = models.CharField(max_length=100, unique=True)
    slug = models.SlugField(max_length=100, unique=True)
    para1 = models.TextField(blank=True)
    subheading1 = models.CharField(max_length=200, blank=True)
    para2 = models.TextField(blank=True)
    subheading2 = models.CharField(max_length=200, blank=True)
    para3 = models.TextField(blank=True)
    subheading3 = models.CharField(max_length=200, blank=True)
    para4 = models.TextField(blank=True)
    subheading4 = models.CharField(max_length=200, blank=True)
    para5 = models.TextField(blank=True)
    posted = models.DateTimeField(db_index=True, auto_now_add=True)
    category = models.ForeignKey('blog.Category', on_delete=models.CASCADE)
    codeblock = models.ForeignKey('blog.Code', on_delete=models.CASCADE, null=True)
    img = models.ImageField(null=True)
    headliner = models.BooleanField(default=0)

1 个答案:

答案 0 :(得分:2)

不是为每个段落使用不同的字段,这不是一个好的做法,你可以存储在body字段html格式化的值中,如下所示:

<H3>Title</H3><br>
<i>Some text</i>

要正确渲染此类正文,您可以在模板中使用safe过滤器:

{% for i in blog %}
    {{ i.body|safe }}
{% endfor %}

注意safe过滤器禁用html转义,因此只有在body值的来源可信时才应使用它。

<强> UPD

如果您需要格式化文本的特定部分,您可以写custom template filter这样的内容:

def bold_some_text(value): # Only one argument.
    return value.replace('Some text', '<b>Some text</b>', 1)

并将此新标记用于safe

{% for i in blog %}
    {{ i.body|bold_some_text|safe }}
{% endfor %}