问题
我有像
这样的联盟的模特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>
但这有一些明显的复杂性。有没有人有这个好的解决方案?
答案 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
相反。