2012-02-01 23 views
5

Tôi đã nhận thấy rằng mẫu của tôi đang hiển thị mô hình của tôi.CharField và model.TextField mà không có bất kỳ khoảng trắng dư thừa nào.dựng hình của textfield và charfield chomps ra khoảng trắng thêm (Django/Python)

Ví dụ, nếu tôi nhập dữ liệu như ...

This  is a   test 


to see what happens. 

Các lĩnh vực đối tượng trả lại sẽ xuất hiện như ...

This is a test to see what happens. 

Đây có phải là một tính năng chủ ý của Django hoặc có tôi bỏ lỡ một số bộ lọc hoặc tham số ở đâu đó?

Tôi đã tự kiểm tra trường bằng một số mã gỡ lỗi (print object.field) và nó chứa khoảng trắng thừa, do đó vấn đề ở phía hiển thị.

Làm cách nào để cho phép người dùng nhập các đoạn dữ liệu trong TextFields? Làm cách nào tôi có thể giữ khoảng trắng mà người dùng có thể đã nhập?

+0

Vui lòng sử dụng một số đánh dấu Stackoverflow. Ngay bây giờ, chúng tôi không thể hiểu mã ví dụ của bạn. –

Trả lời

12

Như bạn có thể thấy ngay cả trong StackOverflow không gian của bạn không hiển thị, đây là từ nguồn gốc của câu hỏi của bạn:

This  is a   test 


to see what happens. 

sẽ lưu trong cơ sở dữ liệu như:

This  is a   test\n\n\nto see what happens. 

Bạn phải các vấn đề khi hiển thị dưới dạng html:

  1. Dấu cách giữa các từ bị tước trên màn hình bởi br owser, trừ khi nó nằm giữa các thẻ <pre></pre>

  2. Đường tắt sẽ được hiển thị dưới dạng dòng văn bản thuần túy, không hiển thị trong trình duyệt trừ khi giữa các thẻ <pre></pre>.

Để có khoảng trắng, bạn có thể sử dụng such a template filter để thay thế chúng bằng thực thể html tương đương: &nbsp;.

Để chuyển đổi ngắt dòng cơ sở dữ liệu trong dòng mã HTML, hãy sử dụng linebreaksbr bộ lọc tích hợp. Ví dụ, nếu {{ foo }} là: test\nbar, sau đó {{ foo|linebreaksbr }} sẽ render: test<br />bar

  1. Tạo một "templatetags" thư mục trong một số ứng dụng của bạn với một tập tin __init__.py trong đó.

  2. Lưu the snippet ví dụ: someapp/templatetags/replace_tag.py

  3. tải template lọc trong mẫu như vậy {% load replace_tag %}

  4. Combine thay thế và linebreaksbr như vậy: {{ foo|linebreaksbr|replace:" ","&nbsp;" }}

Bạn cũng có thể làm mẫu bộ lọc của riêng bạn mà sẽ xử lý văn bản vào HTML bạn cần. Trong mọi trường hợp, hãy tham khảo custom template filter documentation để biết thông tin đầy đủ.

+0

Câu trả lời hay, cảm ơn rất nhiều! Tôi nghĩ rằng bộ lọc linebreaksbr là đủ cho bây giờ. – powlo

+1

Đó là những gì tôi nghĩ lúc đầu – jpic

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