在Django模板中构建动态IMG URL

时间:2018-08-28 20:59:53

标签: django templates concat

我是Django的新手,到目前为止还可以,但是我在构建动态URL时遇到困难。

<script>console.log("{% static 'img/emblem/league/scaled/league_' %}" + {{ league.id }} + ".png");</script>

此行工作正常,并输出正确的链接,在本例中为

  

/static/img/emblem/league/scaled/league_1729.png

但是在以下行中,当我尝试构建动态URL以在for循环中显示不同的图像时,尝试用| add进行操作时会收到TemplateSyntaxError,因为“ +”也不起作用(图像无法加载)

<div class="owl-item"><img class="img-fluid" src="{% static 'img/emblem/league/scaled/league_'|add:{{ league.id }}|add:'.png' %}" alt="{{ league.name }}"></div>
  / matchstatistics /处的

TemplateSyntaxError   添加需要2个参数,提供1个参数

我进行了很多搜索,但找不到解决方法,谢谢。

3 个答案:

答案 0 :(得分:1)

我建议您创建一个模板标签来管理图像网址的创建。

from django import template
from django.contrib.staticfiles.templatetags.staticfiles import static
register = template.Library()

@register.simple_tag
def get_img_url(img, *args, **kwargs):
    """Returns the img url of the given img

    .. usage::  {% get_img_url image_object %}

    """
    image_path = 'here you build your path using the img passed'
    return static(image_path)

更多信息在这里:https://docs.djangoproject.com/en/2.1/howto/custom-template-tags/#writing-custom-template-tags

答案 1 :(得分:0)

如果有人感兴趣,我可以这样解决:

在您的应用目录中的新目录中创建一个文件,将其称为“ templatetags”,然后使用您的html文件名创建另一个.py文件。例如index.py代表index.html。

from django import template
from django.conf.urls.static import static
from django.templatetags.static import static

from ..models import League

register = template.Library()

@register.simple_tag
def getLeagues():
    leagues = League.objects.filter(active=1)
    lgs = []
    for leagueObj in leagues:
        league = {
            "id": leagueObj.id,
            "name": leagueObj.name,
            "url": static('img/emblem/league/scaled/league_' + str(leagueObj.id) + '.png')
        }
        lgs.append(league)
    return lgs

以及django模板中的HTML文件中,对我来说是index.html文件。

   {% getLeagues as leagues %}
   {% for league in leagues %}
      <div class="owl-item">
          <a href="{% url 'matchstatistics:league' league.id %}">
             <img class="img-fluid" src="{{ league.url }}" alt="{{ league.name }}">
          </a>
      </div>  
   {% endfor %}

总结,这段代码是什么? 在轮播中显示图片,一旦您单击某个元素,它将调用具有给定ID的另一个网站来定义网址路径

答案 2 :(得分:0)

您可以使用

get_static_prefix

如果您在settings.py中正确设置了静态网址,则我还没有测试过,但假定可以使用。

app.js

这是我测试过的,效果很好。 本质上来说,破解静态命令是为了返回空字符串的静态URL,然后将其添加到动态路径之前。