2013-11-02 23 views
29

Tôi đang chuyển từ điển từ chế độ xem của tôi sang mẫu. Vì vậy, {"key1":"value1","key2":"value2"} được truyền vào và lặp qua các cặp khóa, giá trị là tốt, tuy nhiên tôi không tìm thấy giải pháp thanh lịch từ truy cập trực tiếp trong chế độ xem từ khóa cụ thể, ví dụ: "key1" ví dụ: bu json.items ["key1"]. Tôi có thể sử dụng một số nếu/sau đó báo cáo, nhưng tôi muốn làm trực tiếp là có một cách?Truy cập từ điển theo khóa trong mẫu Django

Dưới đây là vòng lặp mã trong template html:

{% for key, value in json.items %} 
    <li>{{key}} - {{value}}</li> 
{% endfor %} 

Trả lời

49

Các Django mẫu ngôn ngữ hỗ trợ tìm kiếm chìa khóa từ điển như sau:

{{ json.key1 }} 

Xem mẫu tài liệu trên variables and lookups.

Ngôn ngữ mẫu không cung cấp cách hiển thị json[key], trong đó key là một biến. Bạn có thể viết bộ lọc mẫu để thực hiện việc này, như được đề xuất trong câu trả lời cho số Stack Overflow question này.

4

Để khắc phục vấn đề này bạn có thể thử một cái gì đó như thế này:

def get_context_data(self, **kwargs): 
    context['cart'] = [] 
    cart = Cart() 
    cart.name = book.name 
    cart.author = book.author.name 
    cart.publisher = book.publisher.name 
    cart.price = 123 
    cart.discount = 12 
    cart.total = 100 
    context['cart'].append(cart) 
    return context 


class Cart(object): 
    """ 
    Cart Template class 

    This is a magic class, having attributes 
    name, author, publisher, price, discount, total, image 
    You can add other attributes on the fly 
    """ 
    pass 


By this way you can access your cart something like this: 
{% for item in cart %} 
    <div class="jumbotron"> 
    <div> 
    <img src="{{item.image}}" /> 
    <div class="book_name"> <b>{{item.name}}</b></div> 
    <div class="book_by"><i>{{item.author}}</i></div> 
    <span>Rs. {{item.price}}</span> <i>{{item.discount}}% OFF </i> 
    <b>Rs. {{item.total}}</b> 
{% endfor %} 
3

Ví dụ, để gửi điển dưới đây dict = {'name':'myname','number':'mynumber'}

lần xem: return render(request, self.template_name, {'dict': dict})

Để làm cho giá trị trong html mẫu: <p>{{ dict.name }}</p>

Nó in 'myname'

Các vấn đề liên quan