美文网首页Django学习djangoPython
Django 学习小组:博客开发实战第一周教程 —— 编写博客的

Django 学习小组:博客开发实战第一周教程 —— 编写博客的

作者: 追梦人物 | 来源:发表于2016-05-19 20:00 被阅读43809次

本教程内容已过时,更新版教程请访问: Django 博客开发入门教程

本节是 Django Blog 项目的开篇,是 Django 学习小组的集体学习成果。Django 学习小组是由我发起的一个促进 Django 新手互相学习、互相帮助的组织。小组在一边学习 Django 的同时将一起完成三个项目:

  • 一个简单 Django Blog,用于发布小组每周的学习和开发文档
  • Django 中国社区,为国内的 Django 开发者们提供一个长期维护的 Django 社区,聚集全国的 Django 开发者到这个社区上来
  • Django 问答社区, 类似于 segmentfault 和 stackoverflow 但更加专注(只专注于 Django 开发的问题)的问答社区

目前小组正在完成第一个项目,本文即是该项目第一周的相关文档。

更多的信息请关注我们的 GitHub 组织首页。本教程项目的相关源代码也已上传到 GitHub 的 blog-tutorial 分支 上,请点击链接获取。
同时,你也可以加入我们的邮件列表 django_study@groups.163.com ,随时关注我们的动态,我们会将每周的详细开发文档和代码通过邮件列表发出。
如有任何建议,欢迎提 Issue,欢迎fork,pull requests,当然也别忘了 Star 哦!
每周更新,敬请关注

相关教程:
第二周Django 学习小组:博客开发实战第二周教程 —— 博客详情页面和分类页面
第三周Django 学习小组:博客开发实战第三周教程——文章列表分页和代码语法高亮
第四周Django 学习小组:博客开发实战第四周——标签云与文章归档
第五周Django 学习小组:博客开发实战第五周——基于类的通用视图详解(一)
第六周Django 学习小组:博客开发实战第六周教程 —— 实现评论功能

Django 开发环境的搭建和创建 Blog 工程

django 的开发环境搭建以及如何创建工程在网上有大量的博客和教程介绍,在此不再重复说明。但我建议最好的参考资料还是Django官方的入门 Tutorials ,即官方文档First steps 部分的六个 Parts。当然如果你不喜欢英文,可以看我们的中文翻译版本:Django 入门教程中文翻译版

要开始 Django 开发,你需要从中掌握以下知识:

  • 如何创建 Django 工程,并了解 Django 默认的工程目录结构

  • 如何创建 Django APP

  • 理解 Django 的MTV 模式,学会编写 Model、View、Template

  • Django 如何处理静态文件,即各种 CSS,JS,以及图片文件等

我们强烈建议你在阅读完上面的教程以掌握 Django 开发所需的最基本概念后开始本项目的学习

Django应用是如何工作的?

先看一张流程图,再来逐步讲解其过程:

Django 工作流

1:用户通过浏览器输入相应的 URL 发起 HTTP 请求(一般是 GET/POST)

2:Django 接受到请求,检测 urls.py 文件,找到和用户输入的 URL 相匹配的项,并调用该 URL 对应的视图函数(view),例如,通常来说 urls.py 文件里的代码是这样的:


url(r'^homepage/$', views.home_page)

则当用户输入的 URL 为 www.某个网址.com/homepage 时,django 检测到该 URL 与上面的代码 匹配,于是调用后面的 views.home_page 视图函数,把相应的请求交给该视图函数处理。

3:视图函数被调用后,可能会访问数据库(Model)去查询用户想要请求的数据,并加载模板文件(Template),渲染完数据后打包成 HttpResponse 返回给浏览器(Http协议)

大致工作流程就是这样,从流程可以看出,我们需要做的就是:

  • 编写相应的 url

  • 编写数据库(Model)

  • 编写处理 Http 请求的视图函数(View)

  • 编写需要渲染的模板(Template)

这就是 Django 开发的最主要工作,下面遵循这样的开发流程开始编写我们的 Blog程序吧。

编写 Model

Model 对应数据库,我们编写的是一个 Blog 应用,因此数据库中应该存放 Blog 下的文章(Aticle),文章由标题(title)、正文(body)、发布时间(publised_time)等组成。先看 django 是如何定义数据库的,之后再逐行解释代码(假设你已经对 django 的工程目录结构了解了,我们一般把 Model 定义在 models.py 文件中):

models.py

from django.db import models

class Article(models.Model):
    STATUS_CHOICES = (
        ('d', 'Draft'),
        ('p', 'Published'),
    )

    title = models.CharField('标题', max_length=70)
    body = models.TextField('正文')
    created_time = models.DateTimeField('创建时间', auto_now_add=True)
    last_modified_time = models.DateTimeField('修改时间', auto_now=True)
    status = models.CharField('文章状态', max_length=1, choices=STATUS_CHOICES)
    abstract = models.CharField('摘要', max_length=54, blank=True, null=True, 
                                help_text="可选,如若为空将摘取正文的前54个字符")
    views = models.PositiveIntegerField('浏览量', default=0)
    likes = models.PositiveIntegerField('点赞数', default=0)
    topped = models.BooleanField('置顶', default=False)

    category = models.ForeignKey('Category', verbose_name='分类', 
                                 null=True, 
                                 on_delete=models.SET_NULL)

    def __str__(self):
        return self.title

    class Meta:
        ordering = ['-last_modified_time']


class Category(models.Model):
    name = models.CharField('类名', max_length=20)
    created_time = models.DateTimeField('创建时间', auto_now_add=True)
    last_modified_time = models.DateTimeField('修改时间', auto_now=True)

    def __str__(self):
        return self.name

逐行解释:

from django.db import models
# 和 model 相关的一些API定义在 django.db.models 模块中

class Article(models.Model):
    """
    所有的 model 必须继承自django.db.models
    类 Aticle 即表示 Blog 的文章,一个类被 diango 映射成数据库中对应的一个表,表名即类名
    类的属性(field),比如下面的 title、body 等对应着数据库表的属性列
    """
    STATUS_CHOICES = (
        ('d', 'Draft'),
        ('p', 'Published'),
    )
    # 在 status 时说明

    title = models.CharField('标题', max_length=70)
    # 文章标题,CharField 表示对应数据库中表的列是用来存字符串的,'标题'是一个位置参数     
    #(verbose_name),主要用于 django 的后台系统,不多做介绍。max_length 表示能存储的字符串    
    # 的最大长度
    
    body = models.TextField('正文')
    # 文章正文,TextField 用来存储大文本字符
    
    created_time = models.DateTimeField('创建时间', auto_now_add=True)
    # 文章创建时间,DateTimeField用于存储时间,设定auto_now_add参数为真,则在文章被创建时会自动添加创建时间
    
    last_modified_time = models.DateTimeField('修改时间', auto_now=True)
    # 文章最后一次编辑时间,auto_now=True表示每次修改文章时自动添加修改的时间
    
    status = models.CharField('文章状态', max_length=1, choices=STATUS_CHOICES)
    # STATUS_CHOICES,field 的 choices 参数需要的值,choices选项会使该field在被渲染成form时被渲染为一个select组件,这里我定义了两个状态,一个是Draft(草稿),一个是Published(已发布),select组件会有两个选项:Draft 和 Published。但是存储在数据库中的值分别是'd'和'p',这就是 choices的作用。
    
    abstract = models.CharField('摘要', max_length=54, blank=True, null=True, 
                                help_text="可选,如若为空将摘取正文的前54个字符")
    # 文章摘要,help_text 在该 field 被渲染成 form 是显示帮助信息
    
    views = models.PositiveIntegerField('浏览量', default=0)
    # 阅览量,PositiveIntegerField存储非负整数
    
    likes = models.PositiveIntegerField('点赞数', default=0)
    # 点赞数
    
    topped = models.BooleanField('置顶', default=False)
    # 是否置顶,BooleanField 存储布尔值(True或者False),默认(default)为False

    category = models.ForeignKey('Category', verbose_name='分类', 
                                 null=True, 
                                 on_delete=models.SET_NULL)
    # 文章的分类,ForeignKey即数据库中的外键。外键的定义是:如果数据库中某个表的列的值是另外一个表的主键。外键定义了一个一对多的关系,这里即一篇文章对应一个分类,而一个分类下可能有多篇    文章。详情参考django官方文档关于ForeinKey的说明,on_delete=models.SET_NULL表示删除某个分类(category)后该分类下所有的Article的外键设为null(空)
    
    def __str__(self):
        # 主要用于交互解释器显示表示该类的字符串
        return self.title

    class Meta:
        # Meta 包含一系列选项,这里的 ordering 表示排序,- 号表示逆序。即当从数据库中取出文章时,其是按文章最后一次修改时间逆序排列的。
        ordering = ['-last_modified_time']


class Category(models.Model):
    """
    另外一个表,存储文章的分类信息
    """
    name = models.CharField('类名', max_length=20)
    created_time = models.DateTimeField('创建时间', auto_now_add=True)
    last_modified_time = models.DateTimeField('修改时间', auto_now=True)

    def __str__(self):
        return self.name

由上可见,设计数据库结构就是编写 models,数据库中每一个实体对应的表在 django 中对用着 models.py 中的一个类,类的属性对应着数据库表的属性列。

model 定义完毕后,运行以下命令即可生成相应的数据库:

python manage.py makemigrations

python manage.py migrate

你可以打开相应的数据库文件看看里面生成的表结构,加深理解。

其中以上的代码中涉及到一些 django 相关的概念,分别给出以下参考资料供学习:

编写 View

上面已经介绍了 django 应用的工作流程,数据库建立完毕后需要编写视图函数(view)来处理 Http 请求。同样先来看 django 的 view 代码是如何写的,然后我们再逐行解释。

我们现在要设计的是一个首页的视图函数,即用户进入我们的 Blog 首页后,我们需要把数据库中存储的文章的相关信息取出来展示给用户看:

views.py

from django.views.generic.list import ListView
from blog.models import Article, Category
import markdown2

class IndexView(ListView):
    template_name = "blog/index.html"
    context_object_name = "article_list"

    def get_queryset(self):
        article_list = Article.objects.filter(status='p')
        for article in article_list:
            article.body = markdown2.markdown(article.body, )
        return article_list

    def get_context_data(self, **kwargs):
        kwargs['category_list'] = Category.objects.all().order_by('name')
        return super(IndexView, self).get_context_data(**kwargs)

逐行解释:

from blog.models import Article
from blog.models import Category
from django.views.generic import ListView
import markdown2

class IndexView(ListView): 
    """
    首页视图,继承自ListVIew,用于展示从数据库中获取的文章列表
    """
    
    template_name = "blog/index.html"
    # template_name属性用于指定使用哪个模板进行渲染
    
    context_object_name = "article_list"
    # context_object_name属性用于给上下文变量取名(在模板中使用该名字)
    
    def get_queryset(self):
        """
        过滤数据,获取所有已发布文章,并且将内容转成markdown形式
        """
        article_list = Article.objects.filter(status='p')
        # 获取数据库中的所有已发布的文章,即filter(过滤)状态为'p'(已发布)的文章。
        for article in article_list:
            article.body = markdown2.markdown(article.body, )
            # 将markdown标记的文本转为html文本
        return article_list

    def get_context_data(self, **kwargs):
        # 增加额外的数据,这里返回一个文章分类,以字典的形式
        kwargs['category_list'] = Category.objects.all().order_by('name')
        return super(IndexView, self).get_context_data(**kwargs)

可能觉得奇怪的是既然是视图函数为什么不是用 def 来定义,而是写成一个类?这里涉及到 django 的关于类的通用视图的概念:参考类的通用视图,或者第五周教程ListView 和 DetailView 的解析。我们通过调用 as_view 方法会将该类视图转为一般的视图,这在 url 部分会介绍。

这样,这个视图的工作流程就是首先接受来自用户的 Http 请求,然后从数据库中获取到已经发布的文章列表:article_list = Article.objects.filter(status='p'),并转换 markdown 语法标记,再加载模板文件:template_name = "blog/index.html",将模板中的变量用相应的数据库中的数据库替换后返回给浏览器,这样,用户就看到了从数据库中被取出然后被渲染后的文章列表了。

编写 Template

template 稍微麻烦一点,因为涉及到 html 的相关知识,如果你没有学过 html ,可能会有些看不懂,因此推荐学习一下,这里有很棒的教程:w3school 的 html 教程供学习使用。这里只介绍一点点本项目涉及的模板相关知识,其实 django 文档的入门教程的六个 parts 中涵盖的点已经足以对付此简单的 Blog 项目了。

  • 模板标签,用{% %} 表示,一些常用的有{% for %}循环标签,{% if %}判断标签等。

  • 模板变量,用{{ variable }}表示,模板渲染是这些变量会被数据库中相应的值代替,例如article_list = Article.objects.filter(status='p'),从数据库中取出了已发布的文章列表,赋给了 article_list 变量。如果模板文件中有如下代码:


{% for article in article_list %}
    {{article.title}}

那么渲染时就会循环渲染 n 篇文章,并且 {{article.title}} 也会被存储在数据库中文章的标题取代。

更多详细的资料,请参考官方文档关于 template 的介绍,或者中文文档

编写 URL

写好了数据库、视图和模板,现在就是当用户在浏览器输入 url 访问我们的 Blog 时要告诉 django 哪个 url 的请求对应哪个视图函数来处理,通过 urls.py 来指定:


urls.py

urlpatterns = [

    ...
    url(r'^blog/', views.IndexView.as_view()),
    # 首页调用IndexView
    ...

]

至此,Blog 应用的首页算是完成了,当用户访问我们的主页就可以看到文章列表了:

Django 博客首页

接下来做什么?

至此,我们完成了博客的首页以展示文章列表的功能,接下来我们会为我们的 Blog 添加详情页面和分类页面功能,即用户点击文章标题或者阅读原文后进入文章的详细页面,点击分类则展示该分类下的全部文章列表。敬请期待我们下一周的教程。如果你希望为你的 Blog 添加其他更加独特的功能,也请随时告诉我们。代码获取请点击:GitHub 的 blog-tutorial 分支

相关文章

  • Django 学习小组:博客开发实战第一周教程 —— 编写博客的

    本教程内容已过时,更新版教程请访问: Django 博客开发入门教程。 本节是 Django Blog 项目的开篇...

  • 使用 Fabric 自动化部署 Django

    本文属于 Django 博客开发教程系列文章,全套教程的目录索引请在 Django 博客开发教程目录索引(全 26...

  • 使用 Nginx 和 Gunicorn 部署 Django 博客

    本文属于 Django 博客开发教程系列文章,全套教程的目录索引请在 Django 博客开发教程目录索引(全 26...

  • 13. 评论

    本教程内容已过时,更新版教程请访问: Django 博客开发入门教程。 这是 Django 博客教程的第 13 篇...

  • 12. 分类与归档

    本教程内容已过时,更新版教程请访问: Django 博客开发入门教程。 这是 Django 博客教程的第 12 篇...

  • 11. 页面侧边栏

    本教程内容已过时,更新版教程请访问: Django 博客开发入门教程。 这是 Django 博客教程的第 11 篇...

  • 3. 建立我们的 django 博客应用

    本教程内容已过时,更新版教程请访问: Django 博客开发入门教程。 这是 Django 博客教程的第 3 篇,...

  • 2. 搭建开发环境

    本教程内容已过时,更新版教程请访问: Django 博客开发入门教程。 这是 Django 博客教程的第 2 篇,...

  • 4. 创建 django 博客的数据库模型

    本教程内容已过时,更新版教程请访问: Django 博客开发入门教程。 这是 Django 博客教程的第 4 篇,...

  • 9. 博客文章详情页

    本教程内容已过时,更新版教程请访问: Django 博客开发入门教程。 这是 Django 博客教程的第 9 篇,...

网友评论

  • 29739ad8e7f7:博主能给一下前端模版文件吗?谢谢
  • 2010jing:好东西 马上学一下
  • b84749889041:怎么进小组呀?有qq群或者微信群么?
    追梦人物:@蜗科 暂时没有开。
  • everfight:提个小小建议:models.py,views.py建议写在代码外面,初学者可能会搞错,直接放到代码里面运行了。
  • ddaebc1e49cf:您好~想问一下代码高亮可以做到了,但是代码无法像markdown里显示的一样有一个滚动条可以拖,如果一行代码比较长就会超出,这个应该怎么解决呢,查了好久木有查到:sob: 多谢哈
    追梦人物:@dannyw 应该是你的自定义css,或者第三方框架的css
    ddaebc1e49cf:@追梦人物 麻烦再问一句哈,是pygments提供的css样式的问题还是style.css样式的问题啊。
    追梦人物:@dannyw 这可能是你的css样式的设置问题。
  • 8c72a20aa7b9:非常好:+1:
  • 郝小盼:您好,我是初学者,一点一点跟着这个教材走的,但最后的运行结果是一片空白,请问可能的原因在哪里呀?
    郝小盼:@追梦人物 好的,谢谢
    追梦人物:@小旭227 使用 django1.9试试
    郝小盼:Request Method: GET
    Request URL: http://127.0.0.1:8000/blog/
    Django Version: 1.10.6
    Exception Type: NoReverseMatch
    Exception Value:
    'blog' is not a registered namespace
  • 轩辕小爱:给的github链接打不开了,报404,您看下什么情况
    追梦人物:@轩辕小爱 不好意思,项目地址变更了:https://github.com/zmrenwu/django-blog-tutorial
  • 8796ddb99087:请问html文件在哪呀?分支下的页面显示404,只有全部的代码,一下子看不大懂。。。有没有分篇的代码呀?谢谢
    追梦人物:@风淡云情 仓库地址改了:https://github.com/zmrenwu/django-blog-tutorial
  • b768460f1067:好详细啊,感谢作者分享
  • 隔壁二狗子:没见过这么细致的教程
    追梦人物:@隔壁二狗子 谢谢!
  • ef7659d30dc3:创建表的时候不指定可以为null 怎么都创建不成功啊。。 求指点
    ef7659d30dc3:@追梦人物 已经解决了 有个文件已经生成了数据 只有一条id那个 谢谢!
    追梦人物:@肛道妹妹丶 你的数据库已经有数据了吧?

    需要看一下你的代码和报错信息才知道。你可以去 http://yangxg.top 下发一个问题贴,我会去解答。
  • 4ef3f2639efe:楼主你好,能否对:

    def __str__(self):
    # 主要用于交互解释器显示表示该类的字符串
    return self.title

    说的更细一点儿,比如说这两行代码是不是在每个类后面都原样不动地写?然后 return self.title 指的是什么啊,是不是定义了一个 self 字符串然后返回该字符串所在类的第一个被赋值的值(比如说这里的 title ?可为什么是 title 而不是 body 或者其他呢?)?还有为什么只返回一个 title ...其他内容不返回了吗...返回新手上路,还请多指点一下
    追梦人物:@精灵鼠小弟 对,这都是纯 python 的问题,建议先学习 python 的基本知识再学习 django
    4ef3f2639efe:@追梦人物 然后这里 return self.title 返回的就是 title = models.CharField('标题', max_length=70) 这句代码对应的标题?
    追梦人物:@精灵鼠小弟 嗯,这是一个 python 方法。如果你用 print() 函数输出定义了 str 方法的类,那么显示的就是这个方法返回的值。比如这里显示 self.title,你可以自己定义任何你觉得看着舒服的值。
  • 托爸:def get_context_data(self, **kwargs): 这个函数不太懂。。。:sweat:
    追梦人物:@托爸 这个是插入模板变量的函数,任何 context 里的变量都可以用于模板引擎的渲染
  • Passon_Fang:讲解很详细,但是步骤写的不够完整,需要配合官网的练习。
    追梦人物:@DoubleFang 嗯,一开始写的初衷是假定读者已经完成官网的教程。近期正打算重写一份完全从0开始的教程。
  • 辣辣辣个男人:刚刚入门Django,有个问题想请问一下:重写get_context_data(),在context中增加额外信息之后,context是如何被html调用的呢?
    追梦人物:@李好怂不要怂 context 是 django 模板引擎解析需要的一个字典,里面包含了你需要替换模板变量的信息。
  • be18425f8323:非常感谢这么详细的文章,一直 关注
  • f3d003f8d312:希望通过下邮件列表的申请~
  • f3d003f8d312:太棒啦~迷茫期~希望可以学好django
  • 4c0b3ba25154:有详细的设计文档吗?
    追梦人物:@林炳强 暂时还没有,以后会补上。
  • 7905dadcc585:每一周单独的代码可以给一份吗,我现在看完整的代码,好多地方看不懂。
  • c765a853fbdc:这种情况是哪里出错了呢
    追梦人物:@Seletc 在githyb的issue里提吧。把相关的代码贴出来看看,否则很难分析出问题所在。
  • c765a853fbdc:我现在的问题是 点击title进入文章详情的时候,只有文章id和category_id(也就是分类的id)相同的时侯才能正常进入文章详情 ,否则提示没找到文章,但是我通过点击分类上可以列出该分类下面的所有文章,
    但现实是 多个文章对应一个category_id 而不是一对一的关系
  • c765a853fbdc:楼主大大,我在获取文章分类的时候出现这个
    NoReverseMatch at /blog/
    Reverse for 'category' with arguments '(2L,)' and keyword arguments '{}' not found. 0 pattern(s) tried: []

    views.py里面的关于category的函数是这样的
    def get_context_data(self, **kwargs):
    # 增加额外的数据, 这里返回一个文章分类, 以字典的形式
    kwargs['category_list'] = Category.objects.all().order_by('name')
    return super(IndexView, self).get_context_data(**kwargs)
    追梦人物:@Seletc 已经提示了,没有指定model或者get queryset方法
    c765a853fbdc:@追梦人物 嗯是url出问题了,也弄好了但是又出来新问题
    ImproperlyConfigured at /blog/article/5
    ArticleDetailView is missing a QuerySet. Define ArticleDetailView.model, ArticleDetailView.queryset, or override ArticleDetailView.get_queryset().

    点击文章后出现这个错误
    追梦人物:@Seletc 这里应该是url出了问题。贴出来看下?
  • c765a853fbdc:278705704@qq.com 我想进入邮件列表 楼主大大
    追梦人物:@Seletc 加!
  • 3940c790a8fd:来晚了 学习中
  • LEONYao:"[u"'exit' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format.
    压根没有exit这个变量在啊。。。。卡在这里不知道怎么办
    獨孤鬱悶:@LEONYao 有代码可以看吗
    追梦人物:@LEONYao 不太明白,是模板变量么?
  • StephenRo:看完了入门教程,part1~6,好想跟着一起做。可是文里没有html的代码。 :sob:
    追梦人物:@StephenRo 去github上看看。
  • StephenRo:想问一下 怎么在github上 找到 每一周教程结束时的代码。
    点Commits的话有太多版本的了。
    追梦人物:@StephenRo 不好意思,当时没有做tag,现在不好查了。
  • df1fc9766650:鼓励支持点赞加油
  • 910a5b9cec3d:请问老师:
    python manage.py makemigrations
    python manage.py migrate
    这两句命令是在哪里输入呢?我用的是windows下的pycharm。新手请多包涵
    追梦人物:pycharm按 cltr alt r
  • StephenRo:Using the URLconf defined in blog_project.urls, Django tried these URL patterns, in this order:
    ^admin/
    ^blog/
    The current URL, , didn't match any of these.

    这个错误··请教一下
    獨孤鬱悶:@StephenRo 你的app 有没有加到settings.py里面的installed_app列表中呢?如果可以的话 能否提供你的代码吗?
    追梦人物:看你访问的url是什么,这里显示匹配不到你访问的url
  • StephenRo:中文文档好像404了。。
    StephenRo:@StephenRo 已打开,对翻译文档的壮士表以最高的敬意! :grin:
  • jiangbingo:请问你们是学生还是上班族?
    追梦人物:@jiangbingo 目前是学生。
  • 我心似海洋1995:看到好的文章评论留言是一种美德
  • 兰山小亭:请教个问题,从article_list中取出对象到article,然后改变article.body,会影响到article_list么?
    for article in article_list:
    article.body = markdown2.markdown(article.body, )
    return article_list
  • 2e19c1cca042:ListView 这种用法,看不懂中。之前用的是response
    追梦人物:@秋枫鹤泣 后边有一篇generic view 的介绍
    追梦人物:@秋枫鹤泣 看第四篇有关于类视图的讲解。
  • 长物记:341856145@qq.com 求拉我进邮件列表
  • 时间快没了:类视图看的吐血了 :joy:
    追梦人物:@时间快没了 后面会出类视图的解析
  • fb45eb950852:请问hotmail怎么加入这个邮件列表django_study@groups.163.com,百度了一圈没找到
    追梦人物:@超级泡泡 你的邮箱是?我邀请你
  • bb549f81b4ae:很好的django教程,尤其是注释部分,对于初学者理解程序很有帮助,之前也看了很多教程,但是都是没有注释的,虽然也跟着做下来,但是有些代码还是不理解。希望这个教程能够持续更新,造福广大初学者,谢谢!
    追梦人物:@alphadog619 嗯,谢谢鼓励,如本教程有不明晰的地方也请提出来,我们会持续改善。
    bb549f81b4ae:不是不理解你的教程。是之前看别的教程,代码没有注释,不理解。
    追梦人物:@alphadog619 哪一块不理解呢?欢迎提出来,以便我们改进。
  • 田飞雨:为啥不同步 SF
    田飞雨:@追梦人物 segmentfault
    追梦人物:@strugglingyouth 什么sf?
  • 或与非异:从0到100的好文章,谢谢你。
  • 5cd26482dc1e:好像有个bug,虽然在IndexView中对文章的状态进行了过滤,但是在直接点击分类标签的时候还是能显示全部的文章,CategoryView中没有对文章的状态进行过滤
    追梦人物:@11件礼物 谢谢指出,确实是忘了过滤,马上修复
  • 5cd26482dc1e:我想问一下github上加了templatetags然后在index.html中load 需要设置吧,我运行的时候出现没有找到paginate_tags这个
    追梦人物:@11件礼物 发一下你的tempatetags里paginate_tags.py的代码看下。还有就是Bug问题尽量到github Issue里提一下,这样我回复的会快一些。
    5cd26482dc1e:@追梦人物 我再index.html中加入 {% load paginate_tags %}运行时,报错
    'paginate_tags' is not a registered tag library. Must be one of:
    admin_list
    admin_modify
    admin_static
    admin_urls
    cache
    future
    i18n
    l10n
    log
    static
    staticfiles
    追梦人物:@11件礼物 index.html因该是load了这个标签的,我再看下。
  • tenlee:已阅读过Django官方教程,有开发经验,不知道能加入小组不 :pray: :pray: :pray:
    追梦人物:@tenlee 谢谢,目前由于后台开发人员已经满了,所以不再招收新成员,因为人多不便于管理。目前缺乏前端人员,如果有前端开发意愿的话欢迎加入。
  • xiaomayi2012:这个必须得支持,希望小组能一直坚持下去,写这种实战项目的确实很少,一定持续关注,现在网上的django中国社区都不怎么活跃了。随着python在国内发展的这么火热,django在国内发展也会很火,期待作者能写出更多高质量的教程,并创建一个国内最大最活跃的django中文社区。。提个小建议,作者的教程可以看下自强学堂的django实战教程的写法。一步一步的来,感觉这种教学方式也不错~! :smile:
    xiaomayi2012:@追梦人物 很难得作者写教程这么细致。。。希望作者考虑建立个qq群 或 微信群 有问题可以在里面交流
    追梦人物:@xiaomayi2012 谢谢你的建议,因为目前主要出在学习和开发阶段,这个教程算是我们每周工作的总结,我会尽量写的详细,并希望读者已经阅读过 django 的官方入门教程。后期我们也会出完全面向新手的 django 教程。文档有什么不清晰的地方,恳请提出,我们也会持续更新和改进文档的细节。
  • 理性观看:写的很好,谢谢。
  • 0738faea94e6:写的很详细,辛苦了. :wink:
  • bd4b119c5e2a:虽然没能加入,不过会持续关注。
  • 给我二两面:刚学完了Flask,准备开始学Django, 刚好可以跟着你们的进度,对比参照 :fist:
    追梦人物:@给我二两面 谢谢!因为为了便于管理,因此小组做多只接受5个人,目前人满了。请关注我们的github项目和简书频道以及邮件列表,每周的代码和详细文档都会上传到这些平台供初学者一起学习,也期待您的宝贵意见和建议。
  • 给我二两面:我也申请了,可是人满了 :worried: 会一直关注的, 一起加油吧!
  • fad8fc561570:鼓励,喜欢
    追梦人物:@玄清尚 谢谢!欢迎关注,欢迎建议。

本文标题:Django 学习小组:博客开发实战第一周教程 —— 编写博客的

本文链接:https://www.haomeiwen.com/subject/qjpgrttx.html