2011-07-16 32 views
0

我剛剛實現了django註釋。django-comments問題

settings.py

INSTALLED_APPS = (
    ... 
    'django.contrib.comments', 
) 

product_detail.html

{% get_comment_count for product as comment_count %} 
<p>This event has {{ comment_count }} comments.</p> 

{% render_comment_list for product %} 
{% render_comment_form for product %} 

模板/評論/ form.html

{% load comments i18n %} 
{% if user.is_authenticated %} 
    <form action="{% comment_form_target %}" method="post"> 
     {% csrf_token %} 
     <input type="hidden" name="next" value="/product/{{ product.id }}/" /> 
     {% 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 %} 

模板/評論/ list.html

<div class="comment_start"></div> 
{% for comment in comment_list reversed %} 
    <div class="comment"> 
     {{ comment.comment }} 
     (from <a href="/user/{{ comment.user }}/">{{ comment.user }}</a> - {{ comment.submit_date|timesince }} ago) 
    </div> 
{% endfor %} 

當形式呈現我看到這樣的html代碼:

1 <form action="/comments/post/" method="post"> 
2 <div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='39cad78f1b4adef30adb536717cesd71' /></div> 
3 <input type="hidden" name="next" value="/product/1/" /> 
4 <input type="hidden" name="content_type" value="myapp.product" id="id_content_type" /> 
5 <input type="hidden" name="object_pk" value="2" id="id_object_pk" /> 
6 <input type="hidden" name="timestamp" value="1310776114" id="id_timestamp" /> 
7 <input type="hidden" name="security_hash" value="34efe5f91239db95f429d07ec21a2926bf22a905b65" id="id_security_hash" /> 
8 <p><textarea id="id_comment" rows="10" cols="40" name="comment"></textarea></p> 
9 <p style="display:none;"> 
10  <input type="text" name="honeypot" id="id_honeypot" /> 
11 </p>  
12 <input type="submit" name="post" class="submit-post" value="Add Comment" /> 
13 </form> 

問題:

  • 見在該行4.這是確定有價值嗎?
  • 這是一個很好的方式(與重寫form.html)從表單中刪除名字,姓氏和網址字段?
  • 難道這個硬編碼? value="/product/{{ product.id }}/
  • 我會用ajax/jquery插入註釋,而不是頁面全刷新,這可能嗎?

謝謝大家。

回答

2

第4行似乎沒問題?我至少沒有看到任何問題;)但當然總是測試你的代碼:)

該刪除有點hackish,但這也是因爲模板語言有點有限。如果你有一個最新的版本你可能使用的運營商,但:https://docs.djangoproject.com/en/dev/ref/templates/builtins/#in-operator

硬編碼也不行,使用url templatetag: https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#url

您可以用Ajax做。我是使用Dajax(一個django應用程序; http://www.dajaxproject.com)爲註釋應用程序做的,並且只是從dajax函數調用視圖,但是您也可以從另一個函數調用它。我的解決方案是讓Dajax呈現一個html代碼片段,然後將其發回,並使用主模板中的代碼片段。這樣的佈局代碼在一個地方(雖然網絡使用效率不高)。

+0

但是在第4行中,網站的訪問者可以看到appname和模型名稱,這是正常的嗎? –

+0

評論功能需要它,所以我想是的。我同意你的看法,雖然這不是很漂亮,但是由於評論應用的可插入性,這有點兒。你還有什麼可以建立一個可以對任何對象發表評論的通用視圖? (一個可能的答案是將系統範​​圍的哈希映射到appname-modelname的祕密字符串,以及視圖周圍的包裝器)。 – markijbema

+0

我修復了硬編碼。現在,當我點擊「提交評論」,在textarea中插入零個字符時,它會顯示帶有已完成和錯誤的「/ comment/post」頁面。我可以在同一頁面顯示錯誤,而不是在另一頁面顯示錯誤? (我覺得這很醜) –