【问题标题】:How to add styling in django templates inside for loop using css?如何使用css在for循环内的django模板中添加样式?
【发布时间】:2020-09-29 09:22:10
【问题描述】:

我正在制作一个简单的博客项目,我正在尝试使用 for 循环模板标记来注入每个帖子的数据。但是这样做时,当在博客列表模板上应用 css 时,网格会变得扭曲。但是,在单独的 Html 页面中手动添加的帖子上进行测试时,此 css 工作得非常好。

如何解决这个问题,因为大多数在普通 Html 页面上正常工作的 css 在与 django 模板结合时无法正常工作。

这是我的基本博客文章模板:

{% extends 'basic_app/base.html' %}

{% block content %}
<div class="centerstage">
    {% for post in post_list %}

    <div class="cards">
      <div class="card">
        <img class="card__image" src="{{ post.blog_pic.url }}" alt="">
        <div class="card__content">
          <p>
            <a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a>
          </p>
          <p>
            {{ post.text|safe|linebreaksbr }}
          </p>
        </div>
        <div class="card__info">
          <div>
            <i class="material-icons">{{ post.published_date|date:"D M Y"}}</i>310
          </div>
          <div>
            <a href="{% url 'post_detail' pk=post.pk %}" class="card__link">Comments: {{ post.approve_comments.count }}</a>
          </div>
        </div>
      </div>
    </div>
    {% endfor %}
</div>
{% endblock %}

可以很好地手动添加帖子的 HTML 代码:

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="cards_style.css">
    <title>Blog</title>
  </head>
  <body>
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<div class="cards">
  <div class="card">
    <img class="card__image" src="https://fakeimg.pl/400x300/009578/fff/" alt="">
    <div class="card__content">
      <p>
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Eos ducimus id ab tenetur delectus reiciendis fugit autem qui at.
      </p>
      <p>
        Alias itaque praesentium eum, pariatur consequatur ducimus asperiores accusantium velit minima?
      </p>
    </div>
    <div class="card__info">
      <div>
        <i class="material-icons">thumb_up</i>310
      </div>
      <div>
        <a href="./" class="card__link">View Article</a>
      </div>
    </div>
  </div>
  <div class="card">
    <img class="card__image" src="https://fakeimg.pl/400x300/252c6a/fff/" alt="">
    <div class="card__content">
      <p>
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Eos ducimus id ab tenetur delectus reiciendis fugit autem qui at.
      </p>
      <p>
        Alias itaque praesentium eum, pariatur consequatur ducimus asperiores accusantium velit minima?
      </p>
    </div>
    <div class="card__info">
      <div>
        <i class="material-icons">thumb_up</i>1,993
      </div>
      <div>
        <a href="./" class="card__link">View Article</a>
      </div>
    </div>
  </div>
  <div class="card">
    <img class="card__image" src="https://fakeimg.pl/400x300/f1db26/000/" alt="">
    <div class="card__content">
      <p>
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Eos ducimus id ab tenetur delectus reiciendis fugit autem qui at.
      </p>
      <p>
        Alias itaque praesentium eum, pariatur consequatur ducimus asperiores accusantium velit minima?
      </p>
    </div>
    <div class="card__info">
      <div>
        <i class="material-icons">thumb_up</i>887
      </div>
      <div>
        <a href="./" class="card__link">View Article</a>
      </div>
    </div>
  </div>
  <div class="card">
    <img class="card__image" src="https://fakeimg.pl/400x300/252c6a/fff/" alt="">
    <div class="card__content">
      <p>
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Eos ducimus id ab tenetur delectus reiciendis fugit autem qui at.
      </p>
      <p>
        Alias itaque praesentium eum, pariatur consequatur ducimus asperiores accusantium velit minima?
      </p>
    </div>
    <div class="card__info">
      <div>
        <i class="material-icons">thumb_up</i>2,512
      </div>
      <div>
        <a href="./" class="card__link">View Article</a>
      </div>
    </div>
  </div>
  <div class="card">
    <img class="card__image" src="https://fakeimg.pl/400x300/009578/fff/" alt="">
    <div class="card__content">
      <p>
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Eos ducimus id ab tenetur delectus reiciendis fugit autem qui at.
      </p>
      <p>
        Alias itaque praesentium eum, pariatur consequatur ducimus asperiores accusantium velit minima?
      </p>
    </div>
    <div class="card__info">
      <div>
        <i class="material-icons">thumb_up</i>140
      </div>
      <div>
        <a href="./" class="card__link">View Article</a>
      </div>
    </div>
  </div>
</div>
  </body>
</html>


CSS:

.cards {
    margin: 0 auto;
    max-width: 1000px;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(225px, 1fr));
    grid-auto-rows: auto;
    gap: 20px;
    font-family: sans-serif;
    padding-top: 30px;
}

.cards * {
    box-sizing: border-box;
}

.card__image {
    width: 100%;
    height: 150px;
    object-fit: cover;
    display: block;
    border-top: 2px solid #333333;
    border-right: 2px solid #333333;
    border-left: 2px solid #333333;
}

.card__content {
    line-height: 1.5;
    font-size: 0.9em;
    padding: 15px;
    background: #fafafa;
    border-right: 2px solid #333333;
    border-left: 2px solid #333333;
}

.card__content > p:first-of-type {
    margin-top: 0;
}

.card__content > p:last-of-type {
    margin-bottom: 0;
}

.card__info {
    padding: 15px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    color: #555555;
    background: #eeeeee;
    font-size: 0.8em;
    border-bottom: 2px solid #333333;
    border-right: 2px solid #333333;
    border-left: 2px solid #333333;
}

.card__info i {
    font-size: 0.9em;
    margin-right: 8px;
}

.card__link {
    color: #64968c;
    text-decoration: none;
}

.card__link:hover {
    text-decoration: underline;
}


我是Django的新手,所以请提供一些解决这个问题的方法。

【问题讨论】:

    标签: python html css django django-templates


    【解决方案1】:

    您的 for 循环在您的 django 模板中循环 .cards,并为 post_list 中的每个帖子创建一个新的 .cards。您的 css 运行良好,为您在 html 中的每个 .cards 创建一个网格,但里面只有一个 .card

    由于您的 .card 不在同一个 .cards 中,您的 css 网格系统无法正常工作。

    将你的&lt;div class="cards"&gt; 放在你的 for 循环之前(当然之后关闭它),它会很好地工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 2022-01-25
      • 2013-10-26
      • 2020-01-23
      相关资源
      最近更新 更多