访问django模板中的字典值

时间:2014-01-18 18:23:17

标签: python django dictionary django-templates

请帮我在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]'

2 个答案:

答案 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()