chức năng urlize từ django.utils.html chuyển đổi url thành liên kết có thể nhấp. Vấn đề của tôi là tôi muốn gắn một target = "_ blank" vào "< href ..>", để tôi mở liên kết này trong một tab mới. Có cách nào để tôi có thể mở rộng hàm urlize để nhận thêm một đối số không? hoặc tôi nên tạo một bộ lọc tùy chỉnh bằng cách sử dụng regexes để làm công cụ này? Điều này có hiệu quả không?mở rộng urlize trong django
Trả lời
Không có khả năng tích hợp sẵn trong urlize()
để thực hiện việc này. Do giấy phép của Django, bạn có thể sao chép mã của django.utils.html.urlize
và django.template.defaultfilters.urlize
vào dự án của bạn hoặc vào một ứng dụng riêng biệt và sử dụng các định nghĩa mới thay thế.
Bạn không nên thêm target="_blank"
vào các liên kết của mình, nó không còn được dùng nữa. Người dùng nên tự quyết định xem họ có muốn mở liên kết hay không.
Bạn vẫn có thể mở liên kết với không phô trương JavaScript như vậy (sử dụng jQuery):
$('.container a').click(function(e){e.preventDefault();window.open(this.href);});
Điều đó nói rằng, bạn có thể viết bộ lọc riêng của bạn, nhưng bạn sẽ phải sao chép rất nhiều mã từ django.utils.html.urlize
, không thực sự là DRY.
Bạn có thể thêm một bộ lọc tùy chỉnh, như mô tả here:
tôi đã sử dụng cái này:
def url_target_blank(text):
return text.replace('<a ', '<a target="_blank" ')
url_target_blank = register.filter(url_target_blank, is_safe = True)
Ví dụ về sử dụng:
{{ post_body|urlize|url_target_blank }}
trình tốt cho tôi :)
câu trả lời hay, nó cũng giúp tôi, cảm ơn! – dana
Tôi phải thêm: url_target_blank.is_safe = True để ngăn chặn django thoát khỏi liên kết. –
Để cho phép sử dụng rộng hơn url_target_blank và để làm cho nó hơi chặt chẽ hơn: Tôi sẽ sử dụng thông số thường xuyên trong dòng trả về: def url_target_blank (giá trị): return re.sub ("] +) (? ", '< một mục tiêu = "_ trống" \\ 1> ', giá trị) – Boaz
Phiên bản ngắn nhất, mà tôi sử dụng trong các dự án của mình. Tạo bộ lọc mới, mở rộng bộ lọc mặc định của Django:
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.safestring import mark_safe
from django.utils.html import urlize as urlize_impl
register = template.Library()
@register.filter(is_safe=True, needs_autoescape=True)
@stringfilter
def urlize_target_blank(value, limit, autoescape=None):
return mark_safe(urlize_impl(value, trim_url_limit=int(limit), nofollow=True, autoescape=autoescape).replace('<a', '<a target="_blank"'))
Bạn cũng cần 'từ django.utils.safestring mark_safe' – Nick
Bạn nói đúng - cảm ơn. Đã sửa câu trả lời. –
- 1. mẫu django: bao gồm và mở rộng
- 2. Django: Mở rộng hoặc bao gồm?
- 3. Thông báo lỗi mở rộng Django
- 4. Django: Ghi đè và mở rộng một mẫu ứng dụng
- 5. Mở rộng Chế độ xem Chung của Django
- 6. Mẫu đa cấp Django mở rộng và khối lồng nhau
- 7. Mở rộng trong javascript
- 8. Django: Làm cách nào để sử dụng UUIDField từ các phần mở rộng django
- 9. Xem Mở rộng trong Oracle
- 10. Mở rộng mảng trong TypeScript
- 11. Mở rộng Enum trong C#
- 12. Mở rộng lát trong python?
- 13. Mở rộng enums trong C++?
- 14. Mở rộng ActiveXObject trong javascript
- 15. lớp bên trong mở rộng
- 16. Mở rộng biểu mẫu người dùng mới, trong quản trị Django
- 17. Cách nhận (và sử dụng) các quyền mở rộng trong Facebook bằng Python/Django
- 18. Làm thế nào để bạn mở rộng mô hình Site trong django?
- 19. PHP - mở rộng phương pháp như mở rộng một lớp
- 20. Mở rộng Visual Studio 2010 mở rộng mã
- 21. phương pháp mở rộng để mở rộng lớp tĩnh
- 22. Mở rộng System.Convert
- 23. asp.net mở rộng IPrincipal
- 24. mở rộng đường bezier
- 25. Mở rộng Microsoft.VisualStudio.TestTools.DataSource.XML
- 26. Mở rộng System.Data.Linq.DataContext
- 27. Mở rộng android: WindowTitle
- 28. Mở rộng NUnit
- 29. Mongoose: mở rộng schemas
- 30. Mở rộng Java Enums
Không còn được dùng nữa trong HTML5. –
"Không được chấp nhận nữa trong HTML5" Đó là sự thật. W3Schools cho biết [Thẻ HTML5 A] (http://www.w3schools.com/html5/tag_a.asp) và một bài viết khác cho biết [XHTML không dùng nữa Thẻ mục tiêu] (http://www.infranet.com/_blog/Complete_Website_Optimization_Blog/ post/Replacing_the_XHTML_deprecated_a_target_tag /) –
W3Schools không phải là một nguồn tốt. Thay vì trực tiếp đi đến spec. – stefanw