我的Django模板使用if有什么问题?

时间:2013-04-15 00:01:57

标签: python django django-templates

{% 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 %}

启发式旨在预先设置部分或完整网址的价值,例如google.com,假设有时人们会粘贴完整的浏览器网址,有时人们会输入google.com并且永远不会输入'http: //'.

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

2 个答案:

答案 0 :(得分:1)

如何使用过滤器:

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

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


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

答案 1 :(得分:0)

作为使用内联模板语句或模板过滤器的替代方法,您可以在模型上创建方法/属性来处理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属性中执行更高级的逻辑(例如检查垃圾邮件,损坏的链接等)