(二十)Django的App整合(独立url、模板、静态文件及自定义过滤器标签)


一、App整合

  在django开发之初,就鼓励大家进行松耦合的开发。目的追求代码独立性,可迁移性,可复用性,更方便代码的修改和维护。所以我们开发django的APP的原则就是尽量让项目独立。

二、独立的url

  独立的url针对多个app,也就是说在django项目当中有多个功能块儿。

1、在各自的App当中创建urls.py文件
在这里插入图片描述

2、在主urls当中包含子url
主urls

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
]

urlpatterns += [
    path('login/', include('LoginApp.urls')),
    path('article/', include('Article.urls')),
    path('ckeditor/', include('ckeditor_uploader.urls'))
]

子urls

from django.urls import path
from LoginApp.views import *

urlpatterns = [
    path('index/', index),
    path('register/', register),
    path('login/', login),
    path('logout/', logout),
    path('au/', ajax_userValid),
    path('aa/', threeydata)
]

在这里插入图片描述

3、访问的时候需要主url拼接子url形成完整的url进行访问
在这里插入图片描述

三、独立的模板

  在settings当中,APP_DIRS等于True代表会自动搜索APP目录下的templates目录下的HTML文件。
在这里插入图片描述
  之前manage.py同级目录的templates删除掉

  在app当中创建新的templates目录,并且在该templates目录当中创建自己app名称(大小写可以忽略)的目录。
  创建app名称的目录的目的是为了区分不同app下,相同名称的HTML,比如index.html
在这里插入图片描述
视图当中使用子模板系统:
在这里插入图片描述
Html当中使用子模板系统:
在这里插入图片描述

四、独立的静态文件

  设置独立的url和独立的时候,目的很单纯,只是为了django项目当中的每个应用可以独立的拥有路由和模板。静态文件有点特殊,在网站开发和使用过程当中静态可以被分为两部分:
  1、开发部分,就是指在开发过程当中必须的静态文件,比如:css, js, logo,background
  2、使用部分,在网站使用的过程当中产生的静态文件,比如:上传的照片,文章或 者商品的图片。

  但是,在web开发的工作环境部署的时候,静态文件需要单独处理,如果用户请求的是一个网页,需要返回路由,到视图进行处理,如果请求的是一个图片,服务器直接返回静态资源。
  所以对静态资源的独立思路有些特殊。

1、在app当中创建static目录,并在目录下创建app名称(大小写可以忽略)的目录
在这里插入图片描述
2、将静态文件放入app当中创建的静态目录当中
在这里插入图片描述

3、进行settings配置
收集静态文件针对的是注册过的app

在这里插入图片描述
注释STATICFILES_DIRS、 MEDIA_URL、 MEDIA_ROOT,配置当前项目静态文件的根目录
在这里插入图片描述

4、进行收集命令

python manage.py collectstatic

在这里插入图片描述

解开STATICFILES_DIRS、 MEDIA_URL、 MEDIA_ROOT的注释,将STATIC_ROOT注释掉
在这里插入图片描述

6、修改前端和模型的模型文件路径
前端:
在这里插入图片描述
模型:
在这里插入图片描述

五、自定义过滤器

  在我们的日常的django开发过程当中,难免遇到数据处理的问题,比如,现在通过数据采集,得到了全国3亿人的生日,然后要在前端进行展示,但是,由于数据来源多处,导致生日的格式各种各样,比如 1978-02-03 ,2018年4月16日,这个时候如果数据采集过程当中没有进行数据过滤,就需要有一种功能针对每一条数据的日期进行修改。
1、在APP当中创建templatetags包,然后在里面创建过滤器文件
在这里插入图片描述

2、在templatetags当中的文件里面编写过滤器
在这里插入图片描述

3、在settings INSTALL_APP当中安装过滤器文件
在这里插入图片描述

4、在前端使用过滤器
在这里插入图片描述

过滤器加参数
在这里插入图片描述
前端调用
在这里插入图片描述

六、自定义标签

{% %} tag
安装和配置和自定义过滤器相似
1、在自己的app里建一个templatetags包,在包里创建一个后面要在HTML文件引用的py文件
2、在py文件中,先导入from django import template

代码分为两个部分
第一部分是注册和参数处理是一个函数
第二部分是一个模板节点类,用来处理标签的逻辑

from django import template

register = template.Library()# 实例化注册对象

@register.tag(name="addnum")# 标签在模板中使用时的name
def addnum(parser,token):
    """
    功能:用来接收标签内容进行切分处理
    :param parser: 用来编写携带的end标签使用
    :param token: 标签里面的内容
    :return: 标签内容处理的节点类
    """
    try:
        content = token.split_contents()#{% addnum '3' %}  ['addnum',"'3'"]
        tag_name,tag_content = content
    except ValueError as e:
        msg = str(e)
        raise template.TemplateSyntaxError(msg)
    return AddNum(tag_content[1:-1]) #tag_content[1:-1]作用是去掉双引号

class AddNum(template.Node):
    """
    用来处理具体标签逻辑,并且返回结果
    """
    def __init__(self,format_string):
        self.format_string = format_string

    def render(self, context):
        result = int(self.format_string)+1
        return result

在这里插入图片描述
在这里插入图片描述
我们现在来着重看下上面这段代码是如何工作的。

Django模板解析器扫描整个模板,碰到了addnum这个标签,把其当作一个新的节点Node,获取了addnum ‘7’ 这一串字符串作为token

利用token自带的split_contents方法把上述字符串拆分成两部分: 标签名(tag_name),内容(tag_content), 并返回AddNum节点类处理。tag_content[1:-1]的作用是去掉双引号。

AddNum这个节点类负责渲染节点,通过render方法渲染新的节点,还可以通过context给模板传递其它的变量。当render方法不返回一个具体的值的时候,需要返回一个空字符串。

自定义标签比自定义过滤器可以更好的处理多参数问题。
过滤器函数只能传一个参数,
自定义标签可以写多个参数

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孜孜孜孜不倦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值