在 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 模板中访问字典值的主要内容,如果未能解决你的问题,请参考以下文章