避免代码重复 , 定义共同方法, 自定义过滤器后 , 方便其余视图函数直接使用 , render调用html
被关联的表叫主表 , 关联表叫从表 , 删除主表内容 , 从表内容也会被删除 , 反之不能够django
将True 改为 False , 就是只创建关系不创建约束 , 由于创建约束会致使想删除某个表的字段会不让删除, 可是只创建关系不创建约束 , 能够直接删除 , 这样既能使用Django的查询接口浏览器
文件夹放置在某个app 文件夹下 , 不须要settings中设置 服务器
若是 全局没有, 则按照 INSTALLED_APPS 中 app 应用的顺序 ,依次去每一个app中寻找 templates , 先找到就用app
若是全局没有,则按照 INSTALLED_APPS 中 app项目顺序 依次去每一个app项目的 templatestags 文件夹寻找 ,最后找到的会覆盖以前 函数
PS : 前提是那些模块和过滤器名字都相同 ,就按照上面的规则应用 url
1, 看对应的setting中的INSTALLED_APPS 中是否当前APP项目 ,spa
2, 加一个包 , 包的名 必须为 templetetagescode
3, from django . template import Librarghtm
register = Library() 实例化
@ register.filter @register.simple_tag( 标签过滤器)
例如 :
def func(x,y) return x*y # 此函数加上@register.filter为 自定义乘法过滤器 页面中 {% load 包下的py文件名%} {{a|func:c}} 传两个值 最多只能穿两个值 {% mul 2 4 %} 这种能够穿多个值,
以上过滤器的使用流程,即在何时被调用
1 , 浏览器发送请求
2 , 服务器收到请求 , 开始分发url
3 , 进入对饮的视图函数
4 , 函数render 一个页面 , 并解析页面模板中的模板语法 {{ .... }} {% .... %} {% load 文件名 %}
5 , 当发现{% load ... %} 就会去 templatetags 中寻找对应过滤器 , 并用返回值替换对应的 {% ..... %}
6 , 最终将值渲染到页面中
cal.py
register.inclusion_tag("/menu.html")
def get_menu_data():
menu_list = [1,2,3]
return {"menu_list ":menu_list }
menu.html
{% for foo in menu_list%}
<li> {{foo}} </li>
{%endfor%}
当在别的 页面中调用 {% load cal %}
{% get_menu_data %}
会直接将 menu.html 渲染后的结果在上述页面中显示