这是关于公告的评论。当有人写评论并推送“提交”时,ajax将数据发送到views.py的pushComment(),保存数据,然后返回到ajax。因此,用户无需刷新页面即可查看评论。
问题是,数据格式。
我使用strftime(格式),但它可以解决一些问题。
TIMEZONE未应用新评论。我的服务器TIMEZONE是' asia / seoul'但新评论显示TIMEZONE为UTC。 (仅适用于新评论)
格式顺序已更改。我的格式是'日期到时间'但是时间比约会要早。
这是我的代码。
views.py
def pushComment(request):
pk = request.POST.get('writing_id', 1)
ac = ArticleComments(
user = User.objects.get(username=request.user.username),
article = FreeBoards.objects.get(id=pk),
comments = request.POST.get('comments', 'Nothing'),
# target = 0,
pub_date = datetime.now().replace(microsecond=0),
like = 0,
)
ac.save()
com_cnt = ArticleComments.objects.filter(article=pk).count()
FreeBoards.objects.filter(id=pk).update(comments = com_cnt)
user = MyUser.objects.get(nickname=request.user.myuser)
data = {
'writing_id': pk,
'user': user.nickname,
'comments': ac.comments,
# 'target': ac.target,
'pub_date': str(ac.pub_date.strftime('%y-%m-%d %H:%M:%S %Z')), # why TIMEZONE is UTC ?????
'like': ac.like,
'com_cnt': com_cnt,
}
return HttpResponse(simplejson.dumps(data), content_type="application/json")
模板
<form role="form" class="form-inline" id="form-com-id" name="commentform" onsubmit="return false;" action="." method="POST">{% csrf_token %}
<div class="form-group">
<div class="col-xs-11">
<input type="text" class="form-control" id="id-comment" name="comname" placeholder="Leave your comment.">
</div>
</div>
<div class="form-group">
<div class="col-xs-1">
<button type="submit" class="btn btn-default" id="btn-comment-submit" OnClick="javascript:commentCheck();">Submit</button>
</div>
</div>
</form>
<br><br>
<div class="comments-group">
<div id="com-start" class="panel-heading">자유로운 댓글</div>
{% if comment_list %}
{% for c in comment_list %}
<div class="col-xs-12 col-sm-6 col-md-4">
<div class="{% cycle 'box1' 'box2' 'box3' 'box4' 'box5' %}">
<div class="boxbox">
<div class="com-user">
<p>작성자: {{c.user.myuser}}
<button onclick=deleteCom()>×</button>
</p>
</div>
<div class="com-content ellipsis">
<p>{{c.comments}}</p>
</div>
<div class="com-date"
<p>{{c.pub_date}}</p>
</div>
</div>
</div>
</div>
{% endfor %}
{% endif %}
</div>
的javascript
$('#form-com-id').submit(function() {
var com = $('#id-comment').val();
if(com){
$.ajax({
url : "/sle/freeboards/pushComment/",
type : "POST",
data : {
writing_id : '{{writing_id}}',
comments : com,
csrfmiddlewaretoken: '{{csrf_token}}',
},
dataType : "json",
success:function(data){
$('#id-comment').val('');
/* create elements and class matching */
var divcomgrp = document.getElementsByClassName('comments-group');
var divgrid = document.createElement("div");
divgrid.className = 'col-xs-12 col-sm-6 col-md-4';
var divbox = document.createElement('div');
if(data.com_cnt % 5 == 0) {
divbox.className = 'box5';
} else if (data.com_cnt % 5 == 1) {
divbox.className = 'box1';
} else if (data.com_cnt % 5 == 2) {
divbox.className = 'box2';
} else if (data.com_cnt % 5 == 3) {
divbox.className = 'box3';
} else if (data.com_cnt % 5 == 4) {
divbox.className = 'box4';
}
// quotient = data.com_cnt / 5;
var divcontainer = document.createElement("div");
divcontainer.className = 'boxbox';
var divuser = document.createElement("div");
divuser.className = 'com-user';
var divcont = document.createElement("div");
divcont.className = 'com-content';
var divdate = document.createElement("div");
divdate.className = 'com-date';
/* create paragraphs */
var puser = document.createElement('p');
var textnode = document.createTextNode(data.user);
puser.appendChild(textnode);
var butdel = document.createElement('button');
butdel.innerHTML = '×';
butdel.onclick = deleteCom;
puser.appendChild(butdel);
var pcomments = document.createElement('p');
var textnode2 = document.createTextNode(data.comments);
pcomments.appendChild(textnode2);
var pdate = document.createElement('p');
var textnode3 = document.createTextNode(data.pub_date);
pdate.appendChild(textnode3);
/* appending children */
divuser.appendChild(puser);
divcont.appendChild(pcomments);
divdate.appendChild(pdate);
divcontainer.appendChild(divuser);
divcontainer.appendChild(divcont);
divcontainer.appendChild(divdate);
divbox.appendChild(divcontainer);
divgrid.appendChild(divbox);
divcomgrp[0].appendChild(divgrid);
},
failure: function(data){
alert('fail!!');
},
});
}
});
settings.py
TIME_ZONE = 'Asia/Seoul'
结果
我无法上传图片...所以我会写它。
来自comments.html的原始日期格式:Feb.25,2015,11:31 a.m
ajax评论(暂无评论):UTC 02:31:53 15-02-25
(这两条评论都写在11:31,我写了一条评论并刷新,然后再添加另一条评论。)
(如果我刷新页面,第二个消失,所有日期格式打印为第一个。)
我不知道为什么我输入的格式不起作用。
P.S) ......还有一个,我该怎么做才能打印出日期时间字段&#39;没时间? 需要DateTimeField用于数据库,但在某个页面中,我想显示日期,而不是时间。
答案 0 :(得分:0)
在创建新的pub_date
实例时,您需要将时区感知日期时间设置为ArticleComments
。
from django.utils import timezone
ac = ArticleComments.objects.create(
...
pub_date = timezone.now().replace(microsecond=0),
...
)
其次,如果我错了,请更正我,但我认为您应该先将ac. pub_date
转换为本地时间,然后再将其格式化为字符串:
from django.utils import timezone
data = {
...
'pub_date': timezone.localtime(ac.pub_date).strftime('%y-%m-%d %H:%M:%S %Z')),
...
}
关于您在没有时间的情况下将datetime
对象转换为date
的上一个问题,您可以在该日期时间调用.date()
方法。
>>> from django.utils.timezone import now
>>> today_as_date = now().date()
>>> today_as_date_str = today_as_date.strftime('%Y-%m-%d')
有关详细信息,您可能需要查看Django和timezone documentation库中的pytz。