【问题标题】:Why I am getting a filter error for my template tag?为什么我的模板标签出现过滤器错误?
【发布时间】:2020-08-12 19:52:24
【问题描述】:

我不确定为什么会收到此过滤器错误。我查找了其他人的类似问题,我肯定正在加载我的模板标签,我重新启动了服务器,我有一个模板标签文件夹,其中包含 init.py 文件和保存我的标签的文件,那么,我在这里做错了什么?

错误在{{ request.user|unread_messages }}过滤器无效:'unread_messages'

unread_message_counter.py

from django import template
from dating_app import models 

register = template.Library()

@register.simple_tag
def unread_messages(user):
    return user.InstantMessage.filter(viewed=False).count()

**base.htmnl **

{% load bootstrap4 %}

{% load unread_messages_counter %}


<!-- Navbar is located in this file -->


<!doctype html>
<html lang="en">
<head>

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    {% block head %}
    <title>Basee</title>
    {% endblock %}
</head>
<body>
    <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">

        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>

        <div class="collapse navbar-collapse" id="navbarsExampleDefault">
            <ul class="navbar-nav mr-auto">
                <li class="nav-item active">
                    <a class="nav-link" href="{% url 'dating_app:home' %}">Home <span class="sr-only">(current)</span></a>
                </li>



            </ul>
            <!-- Below is login/registration links and the logic-->
            {% if user.is_authenticated %}
                Hello, {{  user.username  }}
                <ul class="mylinks">
                  <div>
                    <li><a href="{% url 'dating_app:profile' user.id %}">My Profile</a></li>
                    <li><a href="{% url 'dating_app:logout' %}">log out</a></li>
                  <div>
                </ul>
                <li class="nav-item">
                    <a class="nav-link" href="{% url 'dating_app:view_matches' user.id %}">Matches</a>
                </li>

                <li class="nav-item">
                    <a class="nav-link" href="{% url 'dating_app:conversations' user.id %}">Inbox</a>
                </li>

                <li class="nav-item">
                    <a class="nav-link" href="{% url 'dating_app:mingle' %}">Mingle</a>
                </li>
                <li class="nav-item">
                    {{ request.user|unread_messages }}
                </li>




            {% else %}
              <div>
                <a href="{% url 'dating_app:login' %}">log in</a>
                <br>
                <a href="{% url 'dating_app:register' %}">register</a>
              </div>
            {% endif %}

【问题讨论】:

    标签: django


    【解决方案1】:

    不是template tag [Django-doc],这是template filter [Django-doc]。标签意味着您将其呈现为{% unread_messages … %}。因此,您可以使用以下方法使其成为过滤器:

    from django import template
    from dating_app import models 
    
    register = template.Library()
    
    @register.filter
    def unread_messages(user):
        return user.InstantMessage.filter(viewed=False).count()

    或者您可以使用标签,保留@registered.simple_tag,并使用<b>{% unread_messages</b> request.user <b>%}</b> 渲染它。

    【讨论】:

      【解决方案2】:

      我认为问题在于用于加载标签的名称。

      代替:

      {% load unread_messages_counter %}
      

      试试:

      {% load unread_messages %}
      

      【讨论】:

        猜你喜欢
        • 2015-01-04
        • 1970-01-01
        • 2020-02-16
        • 2013-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多