0
{% for url in urls %}
    <a id="URL_url_{{ url.id }}" class="edit_rightclick"
      title="RIGHT click to edit."
      href="{% if ":" not in url.url %}http://{% endif %}{{ url.url }}">{{ url.url }}</a>
    <span class="delete" id="URL_{{ url.id }}">&amp;#10008;</span> &nbsp;
{% endfor %}

启发式旨在预先设置部分或完整 URL(如 google.com)的值,假设有时人们会粘贴完整的浏览器 URL,有时人们会输入 google.com 而从不输入“http://” .

模板引擎抱怨 '{% if ":" not in url.url %}' 是无效语法。这里正确的语法/方法是什么?

4

2 回答 2

1

对此使用过滤器怎么样:

href="{{ ulr.url|urlize }}"

记得在构建自己的之前检查这里(查找 urlize): https ://docs.djangoproject.com/en/dev/ref/templates/builtins/


我认为更好的方法是将 URL 保存为管理员中的绝对 URL,并在显示链接时去除“ http:// ”...

于 2013-04-15T00:36:50.703 回答
0

作为使用内联模板语句或模板过滤器的替代方法,您可以在模型上创建一个方法/属性来处理 url 创建逻辑。假设您的 Url 是一个模型:

class Url(models.model):
    url = model.TextField()

    @property
    def full_url(self):
        if ":" not in url.url:
            ....
        return full_url

并直接在模板中使用

    href="{{ url.full_url }}">{{ url.url }}</a>

模板保持干净且没有“业务逻辑”,这可能是一个很好的方法,例如,如果您有设计师创建 html/css 模板

编辑:这也使您可以在 full_url 属性中执行更高级的逻辑(例如检查垃圾邮件、损坏的链接等)

于 2013-04-15T01:03:17.050 回答