web-dev-qa-db-ja.com

Django css background-image

私のcssファイルは機能していますが、bacgorundイメージを追加できません。私は3つの方法を試しましたが、うまくいきません。

これは私のstyle.cssです

.first-info{
    width: 100%;
    height: 300px;
    background-image: url( "{% static 'img/bg.jpg' %}");
}

これは私のbase.htmlです(imgは機能しています)

{% load static %}
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>{% block title %}VPW{% endblock %}</title>



    <link href="{% static 'css/style.css' %}" rel="stylesheet">
    <link href="{% static 'css/bootstrap.css' %}" rel="stylesheet">
    <link href="{% static 'css/font-awesome.css' %}" rel="stylesheet">
    <script href="{% static 'js/bootstrap.js' %}"></script>

    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div class="container-fluid">
    <div class="row head">
        <div class="col-md-12">
            <div class="col-md-4">
            </div>
            <div class="col-md-4 logo">
                <img src="{% static 'img/logo1.png' %}">
            </div>
            <div class="col-md-4">
            </div>
        </div>
    </div>
</div>
<div id="content">
{% block content %}
{% endblock %}
</div>
</body>
</html>

そして、これは私がクラスfirst-infoを持っている私のmain.htmlです。

{% extends "shop/base.html" %}
{% load static %}

{% block title %}VPW{% endblock %}

{% block content %}
    <div class="container-fluid">
    <div class="row first-info">
        <div class="col-md-4">
            <div class="box">
                Lorem Ipsum 
            </div>
        </div>
        <div class="col-md-4">
            <div class="box">

            </div>
        </div>
        <div class="col-md-4">
            <div class="box">

            </div>
        </div>
    </div>
    </div>

{% endblock %}

Css background-imageを変更してみます:url( "{%static'img/bg.jpg '%}");背景画像へ:url( "img/bg.jpg");しかし、それを動作させないでください

4
Wriddle

これは予想される動作です。 Djangoテンプレートエンジンは、htmlテンプレートのレンダリング中にすべての変数を設定します。これは、htmlに含まれているcssファイルの値を設定しません。

{% static 'img/logo1.png' %}/static/img/logo1.pngのようなものに置き換えられ、ブラウザが画像を見つけてロードし、レンダリングできるため、base.html。

背景画像を動的にしたい場合は、次のいずれかを実行できます。

テンプレートに直接cssクラスを追加できます。

{% extends "shop/base.html" %}
{% load static %}

{% block title %}VPW{% endblock %}
 <style>
.first-info{
    width: 100%;
    height: 300px;
    background-image: url( "{% static 'img/bg.jpg' %}");
}
</style>
{% block content %}
    <div class="container-fluid">
    <div class="row first-info">
        <div class="col-md-4">
            <div class="box">
                Lorem Ipsum 
            </div>
        </div>
        <div class="col-md-4">
            <div class="box">

            </div>
        </div>
        <div class="col-md-4">
            <div class="box">

            </div>
        </div>
    </div>
    </div>

{% endblock %}

または、HTMLタグで直接インラインCSSを使用します。

<div class="row first-info" style="background-image: url({% static 'img/bg.jpg' %})" >

または、cssファイルに完全なパスをハードコーディングするだけです。ただし、動的な動作、つまり静的パスは削除されます。 /static/だけだと思います

.first-info{
    width: 100%;
    height: 300px;
    background-image: url( '/static/img/bg.jpg' );
}
4
Bipul Jain

遅い答えですが、背景画像を動的にロードしようとしている誰かとこれを共有したいと思いました。私の例は、views.pyで生成されたデータベースリクエストをレンダリングすることです。リクエストには、background.photo、background.title、background.bodyの3つの要素が含まれています。必須ではありませんが、写真に不透明度を適用したかったのです。ただし、不透明度プロパティを使用すると、DOM内の要素のすべての子に効果が適用されるため、rgbaを使用して効果を写真に分離しました。写真の不透明度に影響されることなく、テキストがオーバーレイされます。テキストを目立たせるために、左側の写真を暗くするために水平方向のグラデーションを使用しました。

    {% extends 'base_layout.html' %}

{% block content %}
<div class="background-image" style="background: url({{ background.photo.url }} ) no-repeat; background-size: 100%;">
    <div class="container">
        <h2 class="title-text">{{ background.title }}</h2>
        <p class="body-text">{{ background.body }}</p>
    </div>
</div>
{% endblock %}

そしてcss:

.container{
    background: linear-gradient(to right, rgba(0,0,0,1), rgba(255,255,255,0));
}

.background-image{
    margin: 1em;
    border-style: solid;
    border-width: 1px;
    border-color: #ff0080;
}

.title-text{
    font-family: serif;
    color: #ff0080;
    margin: 0;
    padding: .5em 1em;
}

.body-text{
    font-family: serif;
    color: #ff0080;
    margin: 0;
    padding: 1.5em 4em;
}
2
BusterT

これを試して:

background-image:url( '{{STATIC_URL}} /img/bg.jpg');

2
Mark

Djangoは.cssファイルを処理していません。レンダリングされたhtmlテンプレートのみが含まれています。

CSSは静的ファイルであり、拡張可能にする場合は、何らかの管理コマンドの処理を通じてURLを含める必要があります。

それ以外の場合は、URLのパスを使用してください

0
iklinac