мой тег не работает с моим оператором if в моем шаблоне - PullRequest
0 голосов
/ 06 мая 2020

Итак, я пытаюсь отобразить уведомление о значке в моем почтовом ящике, только если у меня> 0 сообщений. По какой-то причине мой оператор if не работает. Я не уверен, что это проблема синтаксиса или мой лог c неправильный. Я возвращаю количество своих сообщений, которые отображаются и работают правильно. Я просто хочу запустить мой оператор if для этого счетчика.

base.html / часть счетчика сообщений

            {% if unread_messages  > 0 %}

                <li>
                    <a ref = 'stylesheet'   href="{% url 'dating_app:conversations' user.id %}" type="text/css"     class="notification"> 
                        <span>Inbox</span>
                        <span class="badge">{% unread_messages request.user %}</span>
                    </a>
                </li>

            {% else %}
                <li>
                    <a ref = 'stylesheet'   href="{% url 'dating_app:conversations' user.id %}">    
                        <span>Inbox</span>
                    </a>
                </li>

            {% endif %}

unread_messages_counter.py

from django import template
from dating_app import models 

register = template.Library()

    @register.simple_tag
    def unread_messages(user):

        return user.receiver.filter(viewed=False).count()

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Вам нужно вызвать свой собственный тег с аргументом as, чтобы вы могли сохранить результат в переменной, которую затем можно было бы использовать в своих условиях.

{% unread_messages request.user as user_unread_messages %}
{% if user_unread_messages > 0 %}
{% endif %}
{{ user_unread_messages }}

Документы для as внизу этого раздела

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

Основная проблема в том, что user не определен. Итак, вы должны включить тег с контекстом, а simple_tag не может этого сделать. Следовательно, вы должны использовать inclusion_tag (чтобы взять контекст, например, request (в данном случае). Refs_inclusion

@register.inclusion_tag('pathwhere_you_rendered.html', takes_context=True)
def unread_messages(context):
    request = context['request']      // request from 
    try:
        unread_messages = request.user.receiver.filter(viewed=False).count()
    except:
        // When user is not logged in
        unread_messages=0

    return {'unread_messages':unread_messages}

pathwhere_you_rendered.html может быть как, home/base.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...