2010-03-06 30 views
14

我一直在閱讀關於評論框架和如何定製它的django文檔(http://docs.djangoproject.com/en/1.1/ref/contrib/comments/custom/) 在該頁面中,它顯示如何新域添加到窗體。但我想要做的就是刪除 unnecesary領域,如網址,電子郵件(除其他次要MODS)如何通過刪除不必要的字段來擴展評論框架(django)?

在同一文檔頁面,它說要走的路是從BaseCommentAbstractModel致以定製評論類,但這就是它,我到目前爲止,現在我很茫然。我無法在這方面找到任何東西。

+0

爲什麼你需要將它們刪除?如果你將它們取出,那麼使用評論框架的可插式應用程序會不會有問題?它們並沒有造成任何傷害,它們消耗的磁盤空間量可以忽略不計。 – Tom

+1

我不是說像我想去的那樣刪除它們並且破解評論代碼。我只是想在這個特定的應用程序中省略它們。 免責聲明:我希望有比CSS隱藏它一個更好的方式,並指定這些領域的幕後一個空值,所以從張貼的答案不要,除非它是來告訴我,這是做到這一點的唯一途徑。 :) – Nacho

回答

12

我最近實施了Ofri提到的解決方案,因爲我只想接受評論的獨立「評論」字段(比如SO,沒有「名稱」,沒有「電子郵件」和沒有「網址」)。

要定製默認的評論形式和列表顯示,我在根「模板」目錄下創建一個「意見」目錄,並推翻了兩個默認評論模板。

我「/templates/comments/form.html」是:

{% 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 %} 

僅根據默認的評論形式略有不同,主要是抑制不要求的「名」的顯示,「電子郵件「和」url「輸入。

我「/templates/comments/list.html」是:

<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 %} 

在我需要的表單的頁面,我先請{% load comments %}然後{% render_comment_form for [object] %}展現形式,或{% render_comment_list for [object] %}生成一個對象註釋列表(用適當的對象名稱替換[object])。

這是對我工作的偉大,仍然給了我所有其他的「免費」附帶Django的意見的東西(中庸,萎靡不振,飼料,多態關聯,等等)

+1

已經有一段時間了,但這正是我當時需要的。謝謝! – Nacho

+0

如何讓評論應用程序使用自定義模板? – john2x

+0

只需將名爲「form.html」和「list.html」的模板放在模板目錄中名爲「comments」的目錄中即可。 – mitchf

2

您可以嘗試overriding the comment form with a custom template,只顯示你想要的字段。

+0

Ofri,如果你看過我的評論的問題,你會看到,這是我想避免,至少理想。不管怎麼說,還是要謝謝你。 – Nacho

+0

我的確看過你的評論,我並不是建議你用CSS隱藏字段。您不會在模板中渲染字段,因此它們將永遠不會存在。它是一個乾淨的解決方案,每個人都使用它,據我所知。如果你喜歡,你可以發明一個新的輪子。 –

+0

我的壞!所以,答案可能一直存在。 那麼,如果我只是不渲染這個領域,他們就不會被要求,框架會忽略它們? – Nacho

4

的整潔總結如何做到這一點優雅,通過實際的意見框架子類的方法,而不是隱藏元素的形​​式/其他凌亂黑客,可以發現Django Comments: Want to remove user URL, not expand the model. How to?

本質上講,你繼承了CommentForm,並改變其get_comment_create_data(個體經營)方法,然後彈出你不想要的屬性(例如電子郵件,網址等)

Ĵ