首页 > 其他分享 >wiki文档库功能实现

wiki文档库功能实现

时间:2022-09-21 17:47:27浏览次数:53  
标签:wiki 功能 name models 目录 project 文档 id

wiki文档库功能实现

  • 建模
class Wiki(models.Model):
    title = models.CharField(max_length=32,verbose_name='标题')
    content = models.TextField(verbose_name='内容')
    project = models.ForeignKey(Project, on_delete=models.CASCADE, verbose_name='项目名称')
    parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='parents', verbose_name='父文档')
    depth = models.SmallIntegerField(default=1,verbose_name='深度')

    def __str__(self):
        return self.title
  • 当前端页面加载完成的时候,就向后端发起ajax请求,获取所有目录标题
    所以,必须有一个接口来返回这些内容
# urls
url(r'^single_manage/(?P<project_id>\d+)/', include([
        ......
        url(r'^wiki/catalog$', wiki.wiki_catalog, name='wiki_catalog'),
    ])),,

# views

'''
- 获取字段: id,title,parent_id

- 还需排序:

    - 先按照 depth 排序:即先渲染所有一级目录

    - 然后按照 id 排序:最先添加的文章就拍在前面
'''


def wiki_catalog(request,project_id):
    data = Wiki.objects.filter(project=request.project).values('id','title','parent_id').order_by('depth','id')
    return JsonResponse({
        'status':True,
        'data':list(data)
    })
  • 前端部分,页面一旦加载完毕,立马向后端发送请求,获取所有的目录标题
    先渲染一级目录,然后在此基础上,一直向后面渲染
# html模板
......
 <div class="panel-body">
    <div class="col-sm-3 title-list">
        <ul id="catalog">
            <!--js渲染待插入的内容-->
        </ul>
    </div>
......
{% block custom_js %}
    <script>

        // 页面加载的时候,立即执行
        $(function(){
            initCatalog();
        })

        function initCatalog(){
            $.ajax({
                url:'{% url "wiki_catalog"  project_id=request.project.id %}',
                type:'GET',
                dataType:'JSON',
                success: function(res){
                   if (res.status){
                        // 遍历每一项
                        $.each(res.data,function(index,item){
                            // <li id="id_num"><a href="#">字段标题内容<ul>......
                            var li = $('<li>').attr('id',"id_" + item.id).append($('<a>').text(item.title).attr('href','#')).append($('<ul>'));
                            // 优先渲染一级目录,有了一级目录,才有以后的二,三...级目录
                            if(!item.parent_id){
                                $('#catalog').append(li);
                            }else{ // 如果不是一级目录,就在原有目录的基础上,再添加进去
                                $('#id_' + item.parent_id).children('ul').append(li);
                            }
                        })
                   }else{
                       alert('初始化目录失败!')
                   }
                }
            })
        }

    </script>
{% endblock %}

标签:wiki,功能,name,models,目录,project,文档,id
From: https://www.cnblogs.com/qinganning/p/16716473.html

相关文章