2013-12-16 17 views
5

tôi đang cố gắng để làm cho công việc đoạn mẫu sau:django mẫu: làm thế nào để mở rộng một biến thành đối số chuỗi cho tích hợp trong thẻ 'url`

<ul> 
    {% for name,label in entries.items %} 
    <li><a href="{% url name %}">{{ label }}</a></li> 
    {% endfor %} 
</ul> 

Như bạn thấy name là một biến mà tôi cần phải mở rộng thành chuỗi trước khi chuyển nó vào thẻ tích hợp url.

Thật không may là kết quả đoạn mẫu nói trên trong ngoại lệ sau đây:

Exception Type: TemplateSyntaxError 
Exception Value:  
Caught NoReverseMatch while rendering: Reverse for 'name' with arguments '()' and keyword arguments '{}' not found. 

Bất kỳ ý tưởng hoặc các phương pháp thay thế về cách đạt được điều này?

Trả lời

2

Mã của bạn nên làm việc cho Django> = 1,4 (iirc) - giả sử name giải quyết một tên url hợp lệ và url này không cần args hoặc kwargs. Đối với Django 1.3x bạn phải thêm {% load url from future %} vào mẫu của bạn để làm việc này. Đối với django < 1.3 bạn không may mắn (tốt, bạn sẽ phải viết một thẻ tùy chỉnh) - nhưng bạn có thể xem xét việc chuyển mã của bạn.

+0

Đây là câu trả lời tôi đang tìm kiếm. Nó hoạt động! Cảm ơn! :) (Tôi đang sử dụng django 1.3.7) – fstab

3

Bạn có thể chuyển biến thành {% url %} templatetag. Nếu name là tên urlpattern hợp lệ, đoạn mã này sẽ hoạt động.

Nếu bạn cần phải chuyển đổi name để một tên URLPATTERN hợp lệ, bạn có thể làm điều đó bằng cách sử dụng bộ lọc tùy chỉnh, như thế này:

{% url name|my_filter %} 
+0

Cảm ơn câu trả lời. Nó có vẻ là một chút dư thừa việc tạo ra một bộ lọc tùy chỉnh mà chỉ cần gọi chức năng giải quyết url Django; đây là lý do tại sao tôi đã hy vọng cho một giải pháp trong khuôn mẫu. – fstab

+0

nhân tiện, 'name' đã chứa tên urlpattern hợp lệ. – fstab

+1

@niekas: cú pháp exemple bạn đăng là dành cho bộ lọc chứ không phải thẻ. –

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