сообщение с рамкой и без рамки с использованием for или if в django - PullRequest
0 голосов
/ 07 мая 2020

models.py:

class post(models.Model):
    title = models.CharField(max_length=40)
    picture = models.ImageField(upload_to='somewhere/dir')
    active_post = models.BooleanField(default=True)
    commercial_post = models.BooleanField(default=False)
    normal_post = models.BooleanField(default=True)
    post_with_colored_border = models.BooleanField(default=False)
    post_title_bold = models.BooleanField(default=False)
    post_with_border_and_title_bold = models.BooleanField(default=False)

    def __str__ (self):
        return self.title

views.py:

def index(request):
    posts= post.objects.filter(active_post=True)
    normal_post = posts.filter(normal_post=True)
    commercial_post = posts.filter(commercial_post=True)
    post_with_border = posts.filter(post_with_colored_border=True)
    post_title_bold = posts.filter(post_title_bold=True)
    post_with_border_and_title_bold = posts.filter(post_with_border_and_title_bold=True)



    context = {
        'posts':posts,
        'commercial_post':commercial_post,
        'post_with_border':post_with_border, 
        'post_title_bold':post_title_bold, 
        'post_with_border_and_title_bold':post_with_border_and_title_bold, 
        }

    return render(request, 'index.html', context)

index. html:

{% if post_with_border AND commercial_post %}
    {% for abc in posts %}         
        <div>
            <a href="#" class="border border-danger">
                <img src="{{abc.picture.url}}">
            </a>
            <h1>
                <a href="#" class="SomeClass"> {{abc.title}}
                </a>
            </h1> 
        </div>
    {% endfor %}

{% else %}  

    {% for abc in normal_post %}         
        <div>
            <a href="#">
                <img src="{{abc.picture.url}}">
            </a>
            <h6>
                <a href="#"> {{abc.title}}
                </a>
            </h6> 
        </div>
    {% endfor %}
{% endif %}

Я хочу сделать это в list, если это коммерческий пост, он должен иметь рамку и H1 в заголовке, но если это обычный пост, у него не должно быть границ и H6. Но проблема в том, что он показывает все сообщения с рамкой и H1. Мне нужна ваша помощь, пожалуйста

Спасибо

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Вам следует подумать о реструктуризации вашей модели.

models.py

class post(models.Model):
    title = models.CharField(max_length=40)
    picture = models.ImageField(upload_to='somewhere/dir')
    active_post = models.BooleanField(default=True)
    commercial_post = models.BooleanField(default=False)

def __str__ (self):
    return self.title

views.py

def index(request):
    posts= post.objects.filter(active_post=True)

    context = {
        'posts':posts,
    }

    return render(request, 'index.html', context)

index. html

{% for post in posts %}         
    <div>
        {% if post.commercial_post %}
        <a href="#" class="border border-danger">
            <img src="{{post.picture.url}}">
        </a>
        <h1>
            <a href="#" class="SomeClass"> {{post.title}}
            </a>
        </h1> 
        {% else %}
        <a href="#">
            <img src="{{post.picture.url}}">
        </a>
        <h6>
            <a href="#"> {{post.title}}
            </a>
        </h6> 
        {% endif %}
    </div>
{% endfor %}

С уважением

0 голосов
/ 07 мая 2020

Вы проверяете, является ли сообщение коммерческим, прежде чем просмотреть его, я думаю, что вам нужно:

{% for post in posts %}         
    {% if post.commercial_post is True %}
    // border & h1 tags, etc.
    {% else %
    // other stuff
{% endfor %}

Я бы go дальше и просто использовал оператор if для установки класс в div, вы затем можете указать, как этот конкретный класс будет оформлен в CSS - это сделает ваш шаблон намного чище.

Более того, если ваш logi c просто означает, что коммерческий пост имеет определенное форматирование, вам следует удалить все остальные поля в вашей модели и из представлений. Py:

post_with_colored_border = models.BooleanField(default=False)
post_title_bold = models.BooleanField(default=False)
post_with_border_and_title_bold = models.BooleanField(default=False)
...