Home >  > 3小时学会django(二)

3小时学会django(二)

0

一、添加评论
原来的django是自带这个django-contrib-comments的,不过Django 1.6之后,它就分离开了。
1.安装

pip install django-contrib-comments -i http://pypi.douban.com/simple/
[/pho]

2.在配置 settings.py 中加入:

INSTALLED_APPS = [
    ...
    'django.contrib.sites',
    'django_comments',
]
SITE_ID = 1

3.执行migrate

python manage.py makemigrations
python manage.py migrate

4.在 urls.py 中加入路由规则(是在项目目录下的url,不是app下面的url)。

path('comments/', include('django_comments.urls')),  

5.views中使用

def display_topic(request, topic_id):
    topic = Topic.objects.get(id=topic_id)
    return render_to_response('topic.html', {'topic': topic},
                              RequestContext(request))

6.模板中使用

{% load comments %}


{% get_comment_form for topic as form %}
<form action="{% comment_form_target %}" method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <input type="submit" value="Comment" />
</form>

备注:
如果copy项目原来的代码不可用,可以使用上面的代码进行测试。

效果预览:

7.解决bug
其实到这里就已经Ok了,不过我测试的时候无法发表评论,后来经过仔细排查,发现原来自己的url配置有问题,访问http://127.0.0.1:8000/^comments/posted/的时候匹配到其他网址去了。

后来直接写成:

urlpatterns = [	
    path(r'^comments/', include('django_comments.urls')), 
	path('', include('weather.urls')),
    path('admin/', admin.site.urls),     
]

这样的形式,问题解决。
发布成功的评论在django_comments这个表中:

8.展示评论

        <div class = "well">
          {% get_comment_list for topic as comment_list %}
          {% for comment in comment_list %}
            <p>Posted by: {{ comment.user_name }} on {{ comment.submit_date }}</p>
            <p>{{ comment.comment }}</p>
          {% endfor %}
        </div> 	

参考:
https://github.com/xiaosongshine/djangoWebs
https://mozillazg.com/2013/01/django-built-in-comments-framework.html
http://www.hongweipeng.com/index.php/archives/1904/

二、添加新的app
1.python manage.py startapp appname
2.在settins.py中添加
3.运行migrate
4.在app的admin中添加后台管理代码
5.就可以在后台使用了。

三、使用UEditorField
1.下载DjangoUeditor
python3: https://github.com/twz915/DjangoUeditor3/ (直接下载zip)

2.将DjangoUeditor放到项目的根目录下面。
3.在settings.py中添加app

    'DjangoUeditor',

4.配置url

path(r'ueditor/', include('DjangoUeditor.urls')), 

参考:
https://www.jianshu.com/p/d236a33a8c01
https://blog.csdn.net/Mr_Sunqq/article/details/80041435

四、文章标签
models

#文章标签
class Tag(models.Model):
    name = models.CharField('文章标签',max_length=100)
    class Meta:
        verbose_name = '文章标签'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name




class Article(models.Model):

    title = models.CharField('标题', max_length=70)
    excerpt = models.TextField('摘要', max_length=200, blank=True)
    category = models.ForeignKey(Category, on_delete=models.DO_NOTHING, verbose_name='分类', blank=True, null=True)
     #使用外键关联分类表与分类是一对多关系
    tags = models.ManyToManyField(Tag,verbose_name='标签', blank=True)

使用方法:

#内容页
def details(request,did):
    show = Article.objects.get(id=did)#查询指定ID的文章
    tags = ','.join([i.name for i in show.tags.all()])
    previous_blog = Article.objects.filter(created_time__gt=show.created_time,category=show.category.id).first()
    netx_blog = Article.objects.filter(created_time__lt=show.created_time,category=show.category.id).last()
    show.views = show.views + 1
    show.save()
    return render(request, 'blog/details.html', locals())
本文暂无标签

发表评论

*

*