2012-07-30 21 views
11

Nếu tôi có một mẫu biến gọi là NUM_COUNTRIES, để pluralize với Django tôi chỉ có thể viết một cái gì đó như thế này:Làm thế nào để số nhiều tên trong một mẫu với jinja2?

countr{{ num_countries|pluralize:"y,ies" }} 

Có cách nào để làm một cái gì đó như thế này với jinja2? (Tôi biết điều này không làm việc trong jinja2) Các jinja2 thay thế cho điều này là gì?

Cảm ơn mọi mẹo!

Trả lời

3

Theo tài liệu của Jinja, không có built in filter làm những gì bạn muốn. Bạn có thể dễ dàng thiết kế một custom filter để làm điều đó, tuy nhiên:

def my_plural(str, end_ptr = None, rep_ptr = ""): 
    if end_ptr and str.endswith(end_ptr): 
     return str[:-1*len(end_ptr)]+rep_ptr 
    else: 
     return str+'s' 

và sau đó đăng ký nó trong môi trường của bạn:

environment.filters['myplural'] = my_plural 

Bây giờ bạn có thể sử dụng my_plural làm mẫu Jinja.

-6

Bạn cũng muốn kiểm tra xem từ đã có số nhiều chưa. Đây là giải pháp của tôi:

def pluralize(text): 
    if text[-1:] !='s': 
     return text+'s' 
    else: 
     return text 

Sau đó đăng ký thẻ vào môi trường của bạn (điều này cũng có thể áp dụng cho công cụ tạo khuôn mẫu Django).

+5

Đó không phải là cách hoạt động của số nhiều. – poxip

21

Câu trả lời của Guy Adini chắc chắn là cách để đi, mặc dù tôi nghĩ (hoặc có thể tôi đã lạm dụng nó) nó không chính xác giống như số nhiều bộ lọc ở Django.

Do đó điều này là thực hiện của tôi (sử dụng trang trí để đăng ký)

@app.template_filter('pluralize') 
def pluralize(number, singular = '', plural = 's'): 
    if number == 1: 
     return singular 
    else: 
     return plural 

Bằng cách này, nó được sử dụng một cách chính xác theo cùng một cách (tốt, với các thông số được truyền theo một cách hơi khác nhau):

countr{{ num_countries|pluralize:("y","ies") }} 
+0

Dường như không cần dấu chấm phẩy khi sử dụng bộ lọc tùy chỉnh có đối số. Ít nhất không có gợi ý cho nó trong tài liệu v.2.8 của jinja2 [tài liệu] (http://jinja.pocoo.org/docs/dev/api/#writing-filters). Tôi đoán ví dụ của bạn nên được cố định như sau: 'countr {{num_countries | pluralize (" y "," ies ")}}' – vrs

+0

21, 31, 41 quốc gia, 11 quốc gia – Suor

+0

Tôi sẽ sử dụng 'số% 100 trong {1 , 21,31,41,51,61,71,81,91} ' – Suor

11

phiên bản hiện tại Jinja có i18n extension mà thêm phong nha dịch và pluralization tags:

{% trans count=list|length %} 
There is {{ count }} {{ name }} object. 
{% pluralize %} 
There are {{ count }} {{ name }} objects. 
{% endtrans %} 

Bạn có thể sử dụng điều này ngay cả khi bạn không thực sự có nhiều phiên bản ngôn ngữ - và nếu bạn thêm các ngôn ngữ khác, bạn sẽ có cơ sở phong phú không yêu cầu thay đổi (không phải tất cả ngôn ngữ đều đa dạng bằng cách thêm 's' và một số thậm chí có nhiều dạng số nhiều).

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