2009-12-15 31 views
12

Tôi cố gắng để trình bày một cuốn từ điển từ view.py tôi tại mẫu HTML như:phím dict với khoảng trống trong Django các mẫu

test = { 'works': True, 'this fails':False } 

và trong mẫu:

này hoạt động mà không có một vấn đề :

{{ test.works }} 

Nhưng một chìa khóa từ điển mà là có một khoảng trống giữa các từ như 'này không thành công' không hoạt động:

{{ test.this fails }} 

tôi nhận được lỗi này:

Could not parse the remainder: ' fails' from 'this fails'

Làm thế nào tôi có thể khắc phục vấn đề này? Tôi không phải là người làm đầy các mô hình, vì vậy tôi không thể thay đổi các phím của dict để loại bỏ không gian.

Trả lời

16

Bộ lọc bạn muốn là một cái gì đó giống như

@register.filter(name='getkey') 
def getkey(value, arg): 
    return value[arg] 

Và sử dụng với

{{test|getkey:'this works'}} 

nên urce: http://www.bhphp.com/blog4.php/2009/08/17/django-templates-and-dictionaries

+0

Đừng quên {% tải myfilter%} trong mẫu – Ross

+2

@Ross - trang web được liên kết đó sẽ có dấu hiệu cảnh báo. Đeo kính râm vào! –

+0

bộ lọc cần phải ở trong một tệp bên trong thư mục templatetags. thêm thông tin @ http://stackoverflow.com/questions/3474734/django-custom-template-filter-cant-work –

-4

Điều đó không phù hợp với tôi. Bạn có thể làm như sau?

{{ test['works'] }} 
{{ test['this fails'] }} 

Đây là cách truy cập từ điển trong python thường hoạt động.

+0

Nevermind, tôi đã thử nghiệm và nó không hoạt động. – SapphireSun

+1

Không thể phân tích phần còn lại: '[' works ']' from 'test [' works ']' – Hellnar

+0

Yep, bạn truy cập các giá trị từ điển cho một khóa sử dụng ký hiệu '.' trong các mẫu Django. –

2

Tôi không biết giải pháp chuẩn nào ở Django. Tôi nghĩ rằng nó có thể với một bộ lọc mẫu.

Bạn có thể quan tâm bởi bài viết này http://push.cx/2007/django-template-tag-for-dictionary-access (tác giả đang sử dụng hạn mẫu thẻ nhưng trong thực tế nó là một mẫu lọc)

Tôi hy vọng nó giúp

+0

Có vẻ như nó hoạt động, nhưng đối với hồ sơ, đó không phải là thẻ mẫu, đó là một bộ lọc (trông giống như bất cứ ai đã viết bài viết đó cũng làm sai lầm đó). –

+0

bạn đã đúng! nó là một bộ lọc. Cảm ơn. Tôi đã cố định rằng – luc

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