如何在文本字段中保存链接

时间:2010-05-20 12:45:05

标签: django django-templates

我有一个带TextField的简单Blog模型。 在TextField中保存链接的最佳方法是什么?

1)以这种形式保存数据库中的链接:http://www.example.com  然后在模板中使用一些过滤器以形式转换它:

<a rel="nofollow" href="http://www.example.com>http://www.example.com</a>

2)直接以这种形式保存数据库中的链接:

<a rel="nofollow" href="http://www.example.com>http://www.example.com</a>

4 个答案:

答案 0 :(得分:4)

假设您正在讨论如何保存您在博客帖子中包含的链接(或任何HTML格式),而不是独立链接(例如blogroll):

您可能想考虑采用某种标记语言,如Markdown或BBCode。然后,您将以纯标记语法存储博客文章,并提供一种方法(如blog.get_post()),该方法将解析存储的标记并返回HTML。然后,您可以在模板中使用safe过滤器,以避免转义HTML。

更好的是,为避免在每个请求中解析标记,请将其缓存在数据库中。向您的Blog模型添加一个名为text_html的TextField。覆盖您的Blog模型的save方法,将标记解析为HTML并将HTML保存到text_html字段。

然后,当您想要在模板中呈现博客帖子时,您可以使用{{ post.text_html|safe }},而无需每次都解析您的标记。

因此,您的Blog模型可能如下所示(为清晰起见,仅显示文本字段)

import markdown

class BlogPost(models.Model):
    text = models.TextField()
    text_html = models.TextField(editable=False) # don't want to see this in Admin

    def save(self, force_insert=False, force_update=False):
        self.text_html = markdown(self.text)
        super(BlogPost, self).save(force_insert, force_update)

为了简化数据输入方面的操作,您还可以添加一个不错的javascript编辑器 - like the one I'm typing this answer in right now

答案 1 :(得分:0)

我会保存URL本身,并在输出中附加标记和参数。在我看来,最好将数据的存储,处理和呈现分开,以便更容易适应未来的变化(例如,在未来的版本中,URL被用于完全其他类似自动下载的东西)。

答案 2 :(得分:0)

您可以使用URL field一个TextField,当然)然后在模板中呈现它。

<a rel="nofollow" href="{{ url }}">{{ url }}</a>

答案 3 :(得分:0)

使用第二种方法,并在使用safe后转义html代码