如何避免内联样式,还能利用模板语言?

时间:2017-12-04 07:41:05

标签: django django-templates

对于模板中对象的每个实例化,我想提取它与ImageField的相关网址以显示照片。但是,如果没有内联样式,我很难找到一种方法:

{% for entry in entries %}
        <div class="row">
        <div class="col s4">
            <div class="card-panel" style="background-image: url('{{entry.image.url}}');">

        <h1>{{entry.title}}</h1>

        </div></div></div>
    {% endfor %}   

这可以将每个单独的图像带到模板中,但我想知道我是否可以抽象出css只是为了将我的css保存在一个单独的文件中。

编辑:同样适用于<img>标记:

<img src="{{ entry.image.url }}">

这个,在模板中,将是动态的。但我无法将其设置为background-image

1 个答案:

答案 0 :(得分:1)

可以使用Django模板系统来渲染CSS并创建动态css文件。我不建议这样做,但如果你真的想要,你可以像普通网址/视图一样进行设置。

例如,您的urls.py会有类似这样的内容

url(r'^dynamic_style/(?P<pk>\w+)$', dynamic_style, name='dynamic')

然后你的观点看起来像

def dynamic_style(request, pk):
    entry = get_object_or_404(Entry, pk)   

    return render_to_response('dynamic_style.css', {
        'image_url': entry.image.url
    }, content_type='text/css')

然后在你的模板中你可以

<link href="{% url 'dynamic_style' pk=entry.id %}" rel="stylesheet">

这是一种生成css的笨重方式。如果您可以按照上面的建议使用内联,那就更好了。