[学习:Django搭建个人博客 1]创建项目并配置APP功能模块

239 阅读2分钟

参考 Django搭建个人博客

创建Django项目

输入创建命令

django-admin startproject myblog

设置中文及时区

修改根目录settings.py文件:

LANGUAGE_CODE = 'zh-Hans'

TIME_ZONE = 'Asia/Shanghai'

...

USE_TZ = False

配置jinja2

修改根目录settings.py文件: 模板放在jinja2中

TEMPLATES = [
    #jinja2
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        'DIRS': ['project/templates',],
        'APP_DIRS': True,
        'OPTIONS': {
            'environment': 'dzpms.jinja2.environment',
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
    #默认模板
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['',],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

project主目录下新建文件jinja.py:

from django.templatetags.static import static
from django.urls import reverse

from jinja2 import Environment


def environment(**options):
    env = Environment(**options)
    env.globals.update({
        'static': static,
        'url': reverse,
    })
    return env

创建并配置APP功能模块

创建App

django-admin startapp article

查看myblog目录
image.png

注册APP(settings)

打开myblog的settings.py,找到INSTALLED_APPS添加app:

settings.py/

INSTALLED_APPS = [
    # 其他代码
    ...

    # 新增'article'代码,激活app
    'article',
]

配置访问路径(urls)

1 配置 project/url.py

在根 URLconf 文件中指定我们创建的 arcticle.urls 模块。
打开myblog目录下的urls.py文件的 urlpatterns 列表里插入一个 include(), 如下:

urls.py/

from django.contrib import admin
# 记得引入include
from django.urls import path, include

# 存放映射关系的列表
urlpatterns = [
    path('admin/', admin.site.urls),

    # 新增代码,配置app的url
    path('article/', include('article.urls', namespace='article')),
]

现在我们已经通过path将根路径为article/的访问都分发给article这个app去处理。但是app通常有多个页面地址,因此还需要app自己也有一个路由分发.

path为Django的路由语法。参数article/分配了app的访问路径;include将路径分发给下一步处理;namespace可以保证反查到唯一的url,即使不同的app使用了相同的url(后面会用到)。记得在顶部引入include
函数 include() 允许引用其它 URLconfs。每当 Django 遇到 include() 时,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到 URLconf 以供进一步处理。

2 配置apps/urls.py

创建URLconf,映射URL到视图。
在app生成时并没有urls.py这个文件,因此需要自己在article/文件夹中创建urls.py,在里面输入:

article/urls.py

# 引入path
from django.urls import path

# 正在部署的应用的名称
app_name = 'article'

urlpatterns = [
    # 目前还没有urls
]

urlpatterns中暂时是空的,没写入任何路径的映射,不着急以后会写。

在项目中,可能会有五个,十个,二十个,甚至更多应用。
根 URLconf 中添加命名空间,在 apps/urls.py 文件中稍作修改,加上 app_name 设置命名空间,使Django 能够分辨重名的 URL、 知道 {% url %} 标签到底对应哪一个应用的 URL。
编辑模板html文件,从:"{% url 'name' %}" 修改为指向具有明明空间的详细视图:"{% url 'app:name' %}"

此时我们的app就配置完成了。