2010-03-06 23 views
14

Tôi đã đọc trên tài liệu django về khung nhận xét và cách tùy chỉnh nó (http://docs.djangoproject.com/en/1.1/ref/contrib/comments/custom/) Trong trang đó, nó hiển thị cách thêm trường mới vào biểu mẫu. Nhưng những gì tôi muốn làm là để loại bỏ lĩnh vực unnecesary, giống như URL, email (trong số mods nhỏ khác.)Làm cách nào để mở rộng khung nhận xét (django) bằng cách xóa các trường không cần thiết?

Trên trang doc cùng nó nói con đường để đi là để mở rộng lớp bình luận tùy chỉnh của tôi từ BaseCommentAbstractModel, nhưng đó là khá nhiều nó, tôi đã đến nay và bây giờ tôi đang ở một mất mát. Tôi không thể tìm thấy bất cứ điều gì về khía cạnh cụ thể này.

+0

Tại sao bạn cần xóa chúng? Nếu bạn loại bỏ chúng, bạn sẽ không gặp vấn đề với bất kỳ ứng dụng cắm được nào có sử dụng khung nhận xét không? Họ không thực sự làm bất kỳ tác hại và số lượng không gian đĩa họ tiêu thụ là không đáng kể. – Tom

+1

Tôi không có nghĩa là xóa chúng như tôi muốn đi và hack mã nhận xét. Tôi chỉ muốn bỏ qua chúng trong ứng dụng cụ thể này. Tuyên bố miễn trừ trách nhiệm: Tôi hy vọng có một cách tuyệt vời hơn là ẩn nó bằng css và gán cho các trường đó một giá trị rỗng đằng sau hậu trường, do đó, không đăng câu trả lời đó, trừ khi nó cho tôi biết đó là cách duy nhất để làm điều đó. :) – Nacho

Trả lời

12

Gần đây tôi đã triển khai giải pháp mà Ofri đã đề cập, vì tôi chỉ muốn chấp nhận trường "nhận xét" đơn độc cho nhận xét (như SO, không "tên", không "email" và không có "url").

Để tùy chỉnh biểu mẫu nhận xét mặc định và hiển thị danh sách, tôi đã tạo thư mục "nhận xét" trong thư mục "mẫu" gốc của tôi và ghi đè hai mẫu nhận xét mặc định.

của tôi "/templates/comments/form.html" là:

{% load comments i18n %} 
{% if user.is_authenticated %} 
    <form action="{% comment_form_target %}" method="post"> 
     {% csrf_token %} 
     {% if next %}<input type="hidden" name="next" value="{{ next }}" />{% endif %} 
     {% for field in form %} 
      {% if field.is_hidden %} 
       {{ field }} 
      {% else %} 
       {% if field.name != "name" and field.name != "email" and field.name != "url" %} 
        {% if field.errors %}{{ field.errors }}{% endif %} 
        <p {% if field.errors %} class="error"{% endif %} {% ifequal field.name "honeypot" %} style="display:none;"{% endifequal %}> 
        {{ field }} 
        </p> 
       {% endif %} 
      {% endif %} 
     {% endfor %} 
     <input type="submit" name="post" class="submit-post" value="{% trans "Add Comment" %}" /> 
    </form> 
{% else %} 
    I'm sorry, but you must be <a href="javascript:alert('send to login page')">logged in</a> to submit comments. 
{% endif %} 

Đó là chỉ hơi khác so với hình thức bình luận mặc định, chủ yếu là đàn áp màn hình hiển thị của "tên" không-yêu cầu, "email đầu vào "và" url ".

của tôi "/templates/comments/list.html" là:

<div class="comment_start"></div> 
{% for comment in comment_list %} 
    <div class="comment"> 
     {{ comment.comment }} 
     (from <a href="javascript:alert('show user profile/stats')">{{ comment.user }}</a> - {{ comment.submit_date|timesince }} ago) 
    </div> 
{% endfor %} 

Trên trang Tôi muốn các hình thức, đầu tiên tôi gọi {% load comments %} và sau đó {% render_comment_form for [object] %} để hiển thị các hình thức, hoặc {% render_comment_list for [object] %} để tạo ra một danh sách các chú thích trên đối tượng (thay thế [đối tượng] bằng tên đối tượng thích hợp của bạn).

Đây là hoạt động lớn đối với tôi, và vẫn đem lại cho tôi tất cả các khác "tự do" thứ mà đi kèm với django ý kiến ​​(điều độ, suy giảm, thức ăn, các hiệp hội đa hình, vv ...)

+1

Đã lâu rồi, nhưng đây chính xác là những gì tôi cần sau đó. Cảm ơn! – Nacho

+0

Làm thế nào để bạn cho ứng dụng nhận xét sử dụng các mẫu tùy chỉnh của bạn? – john2x

+0

Chỉ cần đặt các mẫu của riêng bạn có tên là "form.html" và "list.html" trong một thư mục có tên là "nhận xét" trong thư mục mẫu của bạn. – mitchf

2

Bạn có thể thử overriding the comment form with a custom template chỉ hiển thị các trường bạn muốn.

+0

Ofri, nếu bạn đọc nhận xét của tôi về câu hỏi, bạn sẽ thấy rằng đây là điều tôi muốn tránh, ít nhất là lý tưởng. Dù sao cũng cảm ơn bạn. – Nacho

+0

Tôi đã đọc nhận xét của bạn và tôi không đề xuất bạn ẩn các trường bằng CSS.Bạn sẽ không hiển thị các trường trong mẫu của bạn và do đó chúng sẽ không bao giờ tồn tại. Đó là một giải pháp sạch sẽ, và mọi người sử dụng nó theo như tôi biết. Bạn được chào đón để phát minh ra một bánh xe mới, nếu bạn thích. –

+0

Tệ của tôi! Vì vậy, câu trả lời có thể đã có ở đó toàn bộ thời gian. Vì vậy, nếu tôi chỉ không hiển thị các trường này, chúng sẽ không được yêu cầu và khung làm việc sẽ bỏ qua chúng? – Nacho

4

Một bản tóm tắt gọn gàng của làm thế nào để làm điều này một cách thanh lịch, thông qua cách tiếp cận phân lớp khung nhận xét thực tế, thay vì ẩn các phần tử trong một hình thức/hack khác, có thể được tìm thấy Django Comments: Want to remove user URL, not expand the model. How to?

Về cơ bản, bạn phân lớp CommentForm và thay đổi phương thức get_comment_create_data (self) của nó, và sau đó bật ra các thuộc tính bạn không muốn (ví dụ: email, url, v.v.)

J

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