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

Posted

技术标签:

【中文标题】如何在文本字段中保存链接【英文标题】:How to save links in TextFields 【发布时间】:2011-02-21 20:37:10 【问题描述】:

我有一个带有 TextField 的简单博客模型。 在 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>

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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。

【讨论】:

我想是的。这是一种非规范化 - 牺牲一点数据库空间以获得更快的访问(不必为每个请求解析降价)。数据库空间通常比 CPU 时间“便宜”很多。这也是 James Bennett 的 Practical Django Projects 一书中推荐的方法。我过去曾成功使用过它。 巧合的是,书中的例子甚至是一个博客项目。 最好使用save(self, *args, **kwargs),而不是将整个*args, **kwargs 传递给超级调用。【参考方案2】:

使用第二种选择,然后使用safe 转义html代码

【讨论】:

【参考方案3】:

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

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

【讨论】:

我说的是 TextField 中的链接 ;) 好吧,我建议您使用 URL 字段而不是文本字段。为什么首先使用 TextField?此外,即使您想使用 TextField,我的回答也是完全一样的。 OP 正在讨论博客文章中包含的链接。我认为没有任何(好的)方法可以根据特定帖子中的链接数量来拥有任意数量的 URLField。【参考方案4】:

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

【讨论】:

以上是关于如何在文本字段中保存链接的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义表格视图单元格中保存文本字段

在VueJS中使用'require'显示图像时如何保存图像链接?

如何通过可下载的链接将文本保存为 .txt 文件?

如何知道文本字段何时更改而不保存

如何使用 PHP 在 MySQL 数据库中将纯文本 CSV 字段保存为 HTML?

当字段为空时,如何让内容类型中的链接字段显示默认文本