【问题标题】:Use variable in template Django template logic在模板 Django 模板逻辑中使用变量
【发布时间】:2021-05-04 22:33:27
【问题描述】:

如果我有一个字典 {{tokens}} 正在使用该输出在我的 Django 模板中呈现:

{26: <Token: 0c90dd25e8bc07578725160349fd6fedac776afb>, 28: <Token: 6e3bb042eb4ea05918e26b80a2c6d7fada99cf86>, 29: <Token: ca4dc6ccc893605195002be986a07142d96f3371>, 42: <Token: 2f157eb152b818b5ca53d63344279626a73a4e38>}

我可以使用 {{tokens.26}} 访问模板中的字典键 26 值

但是,如果我使用查询集来访问这些值,我该如何访问呢?例如,我想做这样的事情:{{tokens.machine.id}} 其中{{machine.id}} 等于 26。 这行不通。 我也试过:

{% with machine.id as machineID %}
{{ tokens.machineID }}
{% endwith %}

这什么也不输出。

编辑 添加了模型、视图和模板

型号:

class CustomUser(AbstractUser):
    PSScustomer= models.ForeignKey(Customer, on_delete=models.CASCADE)
    customerTag = models.CharField(max_length=50,) 
    isAdmin = models.BooleanField(default = False,)
    isSuperUser = models.BooleanField(default = False,)
    activated = models.BooleanField(default = False,) 

查看

class equipmentdashboardView(LoginRequiredMixin,ListView):
    context_object_name = 'equipmentdashboard'
    template_name = 'equipmentdashboard.html' 
    login_url = 'login'

    def get_queryset(self):
        if self.request.user.is_superuser: #so that admin can see all machines
            machineQuery = CustomUser.objects.filter(isDevice=True).order_by('order')
            groups = machineQuery.values_list('group', flat=True)
            uniqueList = []
            machineDict = {}
            for group in groups:
                if group not in uniqueList:
                    uniqueList.append(group)
            for group in uniqueList:
                machineDict[group] = CustomUser.objects.filter(group = group, isDevice=True).order_by('order')
            return machineDict
        else:
            machineQuery = CustomUser.objects.filter(PSScustomer=self.request.user.PSScustomer).filter(isDevice=True).order_by('order')
            groups = machineQuery.values_list('group', flat=True)
            uniqueList = []
            machineDict = {}
            for group in groups:
                if group not in uniqueList:
                    uniqueList.append(group)
            for group in uniqueList:
                machineDict[group] = CustomUser.objects.filter(PSScustomer=self.request.user.PSScustomer, group = group, isDevice=True).order_by('order')
            return machineDict


    def get_context_data(self, **kwargs):
        context = super(equipmentdashboardView, self).get_context_data(**kwargs)
        assets = CustomUser.objects.filter(PSScustomer=self.request.user.PSScustomer, isDevice = True)
        tokens = {}
        for asset in assets:
            tokens[asset.id] = Token.objects.get(user=asset)
        context['tokens'] = tokens
        return context

模板

{% for group, machines in equipmentdashboard.items %}
    {% for machine in machines %}
        <p id="serial">{{ machine.deviceSerial }}</p>
        <p id="token">{{ tokens.machine.id}}</p>
    {% endfor %}
{% endfor %}

【问题讨论】:

标签: django


【解决方案1】:

我发现可行的最佳选择是使用属性,这样我就可以像访问任何其他模型字段一样访问令牌。 所以:

class CustomUser(AbstractUser):
    PSScustomer= models.ForeignKey(Customer, on_delete=models.CASCADE)
    customerTag = models.CharField(max_length=50,) 
    isAdmin = models.BooleanField(default = False,)
    isSuperUser = models.BooleanField(default = False,)
    activated = models.BooleanField(default = False,) 

    @property
    def token(self):
       return Token.objects.get(user=self)

【讨论】:

    猜你喜欢
    • 2015-05-05
    • 2012-02-27
    • 2018-12-30
    • 2013-07-25
    • 2010-12-19
    • 1970-01-01
    • 2014-07-15
    • 2014-07-23
    • 2016-02-02
    相关资源
    最近更新 更多