3

我想在我的项目的导航栏上显示用户的名字。此导航栏在base.html文件中。

在我的views.py我创建了一个执行此操作的变量

def base(request):
    user = request.user
    u = User.objects.get(username=user)
    us = u.clients.first_name
    context = {'u': u, 'us': us}
    return render(request, "backend/base.html", context)

我可以让它在任何其他 .html 文件上工作,但不能在 base.html 上工作,看起来像这样

<span class="mb-0 text-sm  font-weight-bold">{{us}}</span>

这是我的模型

class Clients(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=30, verbose_name="Primeiro Nome")
    last_name = models.CharField(max_length=30, verbose_name="Apelido")
    address = models.CharField(max_length=200, verbose_name="Morada")
    nif = models.CharField(max_length=9, verbose_name="NIF", validators=[RegexValidator(r'^\d{1,10}$')], primary_key=True)
    mobile = models.CharField(max_length=9, verbose_name="Telemóvel", validators=[RegexValidator(r'^\d{1,10}$')])
    email = models.CharField(max_length=200, null=True, verbose_name="Email")

    def __str__(self):
        return "%s %s" % (self.first_name, self.last_name)

    class Meta:
        verbose_name_plural = "Clientes"
4

2 回答 2

1

我正在回答我自己的问题。

context_processor.py我可以通过使用以下代码创建一个来解决这个问题

from .models import Clients, Hotels, Trip, Flight
from django.contrib.auth.models import User

def add_variable_to_context(request):  
    user = request.user
    u = User.objects.get(username=user)
    us = u.clients.first_name
    uv = u.clients.avatar
    return {
        'u': u,
        'us': us,
        'uv': uv
    }
于 2020-02-18T00:50:18.260 回答
0

views.py中尝试使用render_to_string函数。并且不要忘记在配置文件中配置静态文件设置。

from django.template.loader import render_to_string

context = {'u': u, 'us': us}
render_to_string('html_name.html', context)
于 2020-02-18T02:25:54.943 回答