如何在模板中很好地呈现URLField

时间:2015-03-14 20:34:28

标签: django django-templates

问题

我有像

这样的联盟的模特
class League(models.Model):
    league_name = models.CharField(max_length=60)
    league_url = models.URLField(null=True, blank=True, default='')

其中league_url可以是指向外部联盟页面的链接(即不是我的网站)。

现在,让我们说用户创建一个联盟并将league_url设置为" pelicanpark.com/leagues/27"。当我在模板中呈现此内容时,{{ league.league_url }}会显示http://www.pelicanpark.com/leagues/27/占用大量空间。

所以,我需要减少它。我的想法是渲染类似

的东西
<a href="http://www.pelicanpark.com/leagues/27/">pelicanpark.com/...</a>

但这有一些明显的复杂性。有没有人有这个好的解决方案?

2 个答案:

答案 0 :(得分:2)

对于这种事情,可能有一些使用regex的奇特方式,但这超出了我的想象。幸运的是,python似乎有urlparse。要在您的示例中实现它:

from urlparse import urlparse

class League(models.Model):
    league_name = models.CharField(max_length=60)
    league_url = models.URLField(null=True, blank=True, default='')

    def url_text(self):
        parsed_url = urlparse(self.league_url)
        return parsed_url.hostname.replace("www.", "") + "/..."

然后在模板中:

<a href="{{ league.league_url }}">{{ league.url_text }}</a>

我会避免在后端渲染html。我一直被告知这样做存在安全风险。

答案 1 :(得分:0)

上面的答案是正确的。我只是遇到了同样的问题,发现了一些变化。对于Python3及更高版本,请使用:

from urllib.parse import urlparse

相反。