请帮我在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 /
中的TemplateSyntaxError无法解析余数:来自'userList [result.pk]'的'[result.pk]'
答案 0 :(得分:0)
你应该为此编写一个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>
答案 1 :(得分:0)
您无需在模板级别创建字典来访问驱动程序,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()