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

标签 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>

但这有一些明显的复杂性。有没有人有好的解决办法?

最佳答案

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

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。我总是被告知这样做存在安全风险。

关于django - 如何在模板中很好地呈现 URLField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29053875/

相关文章:

python - jinja2:如何让它像 django 模板一样无声地失败

Django按首字母分组查询集?

html - 单击链接后可滚动的垂直菜单跳转到顶部

python /Django : How to display error messages on invalid login?

django - 当我只有一个域时,我应该在哪里为我的 Django Sites 框架站点设置域?

django - 根据用户Django的权限制作动态侧边栏

python - django Rest框架使用ArrayAgg和GROUP BY进行注释

python - Django DateTimeField 说 'You are 5.5 hours ahead of server time.'

django - 无法解析可调用上下文变量

python - 在 Django 中使用变量更改 HTML