在 django 模板中访问字典值

Posted

技术标签:

【中文标题】在 django 模板中访问字典值【英文标题】:Accessing dictionary values in django templates 【发布时间】:2014-02-08 02:11:13 【问题描述】:

请帮助我在 django 模板中显示字典的值。我尝试谷歌查找,但无法找到解决方案。

下面是模型

class Ride(models.Model): 
    type = models.BooleanField(default=False)
    add_source = models.ForeignKey(Address, related_name='source')
    add_destination = models.ForeignKey(Address, related_name='destination')
    ride_comment = models.TextField(null=True,max_length=140,blank=True)
    def __unicode__(self):
        return self.ride_comment

class Driver(models.Model):
    ride_id = models.ForeignKey(Ride)
    user_id = models.ForeignKey(User)
    drv_carseats = models.SmallIntegerField(null=True,blank=False)
    def __unicode__(self):
        return self.user_id.username

查看

for ride in result_list:
        if ride.type:
            driver = Driver.objects.get(ride_id = ride)
            userList[ride.pk] = driver.user_id.username
            print 'driver', driver.user_id.username, userList[ride.pk]
 return render_to_response('rides/search.html', 'result_list':result_list,'userList':userList, context )

这是我的模板代码

% for result in result_list %
     % if result %
         <a href="/rides/ridedetails/ result.pk "> userList[result.pk] </a>
         <em> result.add_source </em>
         <em> result.add_destination </em>
         <em> result.ride_comment </em>
     % endif %
% endfor %

我收到以下错误

/rides/search/ 处的模板语法错误

无法解析余数:来自“userList[result.pk]”的“[result.pk]”

【问题讨论】:

【参考方案1】:

你应该为此编写一个 django 自定义过滤器。

在您的应用程序中创建一个文件名 get_dict_val.py..

project
   -app
      -templatetags
          __init__.py
          get_dict_val.py

现在在 get_dict_val.py 中

@register.filter
def get_item(dictionary, key):
    return dictionary.get(key)

在模板中 将此添加为第一行写入..

% load get_dict_val %

现在替换模板中的代码

<a href="/rides/ridedetails/ result.pk "> userList|get_item:result.pk </a>

【讨论】:

【参考方案2】:

您不需要创建字典来访问模板级别的驱动程序,您可以follow the relationship backward 因为Driver 模型具有Ride 模型的外键:

% for result in result_list %
     % if result %
         % with result.driver_set.all as drivers %
             % for driver in drivers %
                 <a href="/rides/ridedetails/ result.pk "> driver.user_id </a>
             % endfor %
         % endwith %
         <em> result.add_source </em>
         <em> result.add_destination </em>
         <em> result.ride_comment </em>
     % endif %
% endfor %

最好为ForeignKey 指定related_name,因为这样可以更轻松地访问对象:

ride_id = models.ForeignKey(Ride, related_name='drivers')

那么你可以这样做:

ride = Ride.objects.get(id='some_id')
drivers = ride.drivers.all()

【讨论】:

以上是关于在 django 模板中访问字典值的主要内容,如果未能解决你的问题,请参考以下文章

在 django 模板中访问字典值

Django模板:从字典访问值列表

如何在 Django 模板中访问字典列表

在 django 模板中访问具有无效标识符的字典键

Django 模板无法访问字典查找变量。我在代码中犯了啥错误?

如何访问 Django 模板中的字典元素?