使用变量名称的嵌套字典项目的Django模板语法

时间:2018-07-01 17:02:44

标签: python django dictionary

在Django模板页面上,我试图访问嵌套字典中的值。

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;

@Entity
public class Courses
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    int course_id;
    String course_name;
    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "User_x_course", joinColumns = {@JoinColumn(name = "course_id", referencedColumnName = "course_id")}, inverseJoinColumns = {@JoinColumn(name="user_Id", referencedColumnName = "userId")})
    private List<Users> user;
    public void setUser(List<Users> user) {
        this.user = user;
    }
    public Courses() {
        super();
    }
    public int getCourse_id() {
        return course_id;
    }
    public void setCourse_id(int course_id) {
        this.course_id = course_id;
    }
    public String getCourse_name() {
        return course_name;
    }
    public void setCourse_name(String course_name) {
        this.course_name = course_name;
    }

    public void addUser(Users usr)
    {
        if(user == null)
            user = new ArrayList<Users>();

            user.add(usr);
            //usr.addCousre(this);

    }

}

在页面的某处,我有这两个变量

books = 
 { 
   1: { 1: 'Alice', 2: 'Bob', 3: 'Marta' }, 
   2: { 1: 'Alice', 3: 'Marta' }, 
   3: { 1: 'Alice', 2: 'Bob' }, 
 }

我要做的是打印项目info.id = 1 detail.id = 2 (如果存在)或换句话说books[1][2]。我遇到麻烦了,因为我无法访问此嵌套变量。得到solved here。但是,提出的解决方案是使用点表示法访问嵌套的字典项。但是问题在于,使用变量时这似乎不起作用。使用该逻辑,我会做:

books[info.id][detail.id]

但这不会产生任何结果。使用变量访问字典中的项目时,应如何处理?请注意,实际项目可能存在或可能不存在,这就是为什么我在使用{{ books.info.id.detail.id }}

时遇到麻烦的原因

1 个答案:

答案 0 :(得分:2)

您不能直接在模板中执行此操作。您需要使用custom template tag。这会起作用:

@register.simple_tag
def nested_get(dct, key1, key2):
    return dct.get(key1, {}).get(key2)

现在您可以在模板中使用它:

{% load my_tags_library %}
{% nested_get books item.id detail.id %}