母版

母版
什么情况下使用母版?
当多个页面的大部分内容都一样的时候,我们可以把相同的部分提取出来,放到一个单独的母版文件中
使用
在母版中定义需要被替换的block
在子页面中
    先继承母版  --> {% extends '母版.html' %}
    定义block 
        {% block page-main %}
        {% endblock page-main %}
通常的用法
    {% bloack page-css %} {% endblock %}
    {% block page-js %} {% endblock %}

组件
什么时候用组件?
    页面上相对独立的某个部分可以单独拿出来放到一个单独的html文件中
如何使用?
    {% inclue '组件.html' %}

静态文件相关
为什么要使用?
    把静态文件的路径改成动态拼接的,避免在HTML页面中硬编码静态文件的导入路径        
 如何使用?
    {% load static %} {% static 'css/xx.css'%}
    {% load get_static_prefix %}  {% get_static_prefix %}css/xx.css
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Title</title>
  {% block page-css %}
  
  {% endblock %}
</head>
<body>

<h1>这是母板的标题</h1>

{% block page-main %}

{% endblock %}
<h1>母板底部内容</h1>
{% block page-js %}

{% endblock %}
</body>
</html>
母版

常会在母板中定义页面专用的CSS块和JS块,方便子页面替换。

自定义simpletag
和自定义filter类似,只不过接收更灵活的参数。
定义注册simple tag
@register.simple_tag(name="plus")
def plus(a, b, c):
    return "{} + {} + {}".format(a, b, c)
使用自定义simple tag
{% load app01_demo %}
{# simple tag #}
{% plus "1" "2" "abc" %}

inclusion_tag
多用于返回html代码片段
示例:
#templatetags/my_inclusion.py
from django import template
register = template.Library()
@register.inclusion_tag('result.html')
def show_results(n):
    n = 1 if n < 1 else int(n)
    data = ["第{}项".format(i) for i in range(1, n+1)]
    return {"data": data}

#templates/snippets/result.html
<ul>
  {% for choice in data %}
    <li>{{ choice }}</li>
  {% endfor %}
</ul>
#templates/index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>inclusion_tag test</title>
</head>
<body>

{% load inclusion_tag_test %}

{% show_results 10 %}
</body>
</html>

 

posted @ 2018-11-02 15:59  .why  阅读(372)  评论(0)    收藏  举报
Live2D