Python Django如何在侧边栏中列出客户

Python Django如何在侧边栏中列出客户,python,django,Python,Django,我用Django创建了一个系统。一个用户有几个客户。侧栏位于base.html文件中。我为侧边栏创建了一个视图,但它仅在主页中起作用。当我打开另一个页面时,它就消失了。我怎样才能修好它 视图.py def base(request): current_user = request.user userP = UserProfile.objects.get_or_create(username=current_user) customer_list = Customer.ob

我用Django创建了一个系统。一个用户有几个客户。侧栏位于
base.html
文件中。我为侧边栏创建了一个视图,但它仅在
主页中起作用。当我打开另一个页面时,它就消失了。我怎样才能修好它

视图.py

def base(request):
    current_user = request.user
    userP = UserProfile.objects.get_or_create(username=current_user)
    customer_list = Customer.objects.filter(companyName=userP[0].comp_name)
    return render(request, 'base.html', {'customer_list': customer_list})
base.html

<ul>
          <li class="header-menu">
            <span>Customers</span>
          </li>

          <li class="sidebar-dropdown">
              {% for customer in customer_list %}
            <a href="#">
              <i class="fa fa-building"></i>
              <span>{{customer.name}}</span>
            </a>
            <div class="sidebar-submenu">
              <ul>
                <li>
                    <a href="/customers/{{ customer.id }}/update"> Update</a>

                </li>
                <li>
                  <a href="#">Analyses</a>
                </li>
              </ul>
            </div>
              {% endfor %}
          </li>
        </ul>
  • 客户
  • {customer_list%}中的客户为%
    {%endfor%}

嗯,
{{{user}}
是模板中的当前用户。您可以使用以下方式获得公司:

{% for customer in user.userprofile.customer_set.all %}
     {{customer.name}}
{% enfor %}
说明:假设用户与
UserProfile
有OneToOne关系,那么您应该通过
user.UserProfile
获取用户配置文件信息。现在,
Customer
有一个指向
UserProfile
的外键。因此,您可以通过查询(或反向查询)
user.userprofile.Customer\u set.all()
获得所有
Customer
s。如果您已经在ForeignKey中定义了,那么查询应该是
user.userprofile..all()

您可以使用。Django具有模板标记,可以在模板中执行复杂的操作

您可以创建一个自定义模板标记,该标记将用户作为输入,并返回客户查询集,您可以将其保存在变量中,然后循环显示所有客户

在myprojectdir/app_name/templatetags/customer_list.py中

    from django import template
    from myapp.models import Customer

    register = template.Library()

    @register.simple_tag
    def get_customers(user):
        userP = UserProfile.objects.get_or_create(username=user)
        customer_list = Customer.objects.filter(companyName=userP[0].comp_name)
        return customer_list
然后在你的模板中你可以这样做

{% load customer_list %}

{% get_customers request.user as customers %}

{% for customer in customers %}
   <Your html code>
{% endfor %}

{%load customer\u list%}
{%get_customers request.user as customers%}
{customers%%中的客户为%s}
{%endfor%}
由于Django将上下文中的
请求
自动传递给所有模板,因此您应该使用
request.user
访问当前用户

要了解在何处创建模板标记文件,请参阅

有关模板标记的更多信息,请参阅:


您还可以使用而不是简单的标记,以获得更大的灵活性和代码重用性。

您必须提供一个“不工作其他页面”的示例,因为这基本上是您问题的本质所在