扁平化网站设计趋势,电子商务具体是做什么的,沈阳建站公司模板,中国亚马逊网站建设一、模板的组成 html代码和逻辑控制代码 二、逻辑控制代码的形式 1、变量#xff08;使用双大括号引用变量#xff09; a、template和context 语法 : {{ var_name }} 模板系统不仅可以传字符串#xff0c;它可以传递任意对象#xff0c;对于向列表、字典、元组等对象…一、模板的组成 html代码和逻辑控制代码 二、逻辑控制代码的形式 1、变量使用双大括号引用变量 a、template和context 语法 : {{ var_name }} 模板系统不仅可以传字符串它可以传递任意对象对于向列表、字典、元组等对象我们可以用句点来处理叫做深度变量的查找 eg 对应views.py def index(request):l [1, 2, 3]return render(request, index.html, locals()) 对应index.html body
h1传递过来的列表的第一个元素是 {{ l.0 }}/h1
/body 浏览器返回 传递过来的列表的第一个元素是 1 b、变量的过滤器filter 语法格式 : {{ 对象|filter:参数}} 过滤器中有add、addslashes、capfirst、cut、date、default、default_if_none等 add给变量加上相应的值 addslashes给变量中的引号前加斜线 capfirst首字母大写 cut去除指定字符 date格式化时间 。。。 如果传入的变量是一段标签并想要实现其功能则应给使用safe函数 eg: 不用safe函数 body
h1传递过来的列表的第一个元素是 {{ l.0 }}/h1
这是一个{{ s }}
/body 浏览器输出 这是一个a href#跳转链接/a 使用safe函数 body
h1传递过来的列表的第一个元素是 {{ l.0 }}/h1
这是一个{{ s|safe }}
/body 浏览器输出 这是一个跳转链接 autoescape也可以实现同样的功能 eg body
h1传递过来的列表的第一个元素是 {{ l.0 }}/h1
这是一个{{ s|safe }}br
{% autoescape off %}这是一个{{ s }}
{% endautoescape %}
/body 2、标签(tag)的使用使用大括号和百分比的组合来表示使用tag 语法{% tag %} a、{% if %}的使用做判断有if就要有{% endif %} eg: {% if l.0 3 %}h2{{ l.0 }}{% else %}h2{{ l.2 }}
{% endif %}
/h2 b、{% for %}的使用做遍历同样有for就要有{% endfor %} eg: {% for num in l %}p{{ num }}/p
{% endfor %} for循环中还内置了forloop模板变量forloop.counter表示循环的次数它从1开始计数第一次循环设为1forloop.counter0从0开始计数forloop.revcounter反转计数forloop.first第一次循环时其值为True eg: {% for num in l %}p{{ forloop.counter0 }}:{{ num }}/pp{{ forloop.counter }}:{{ num }}/p
{% endfor %} c、{%csrf_token%}csrf_token标签 当用post的方法提交表单时django会报一个错误这是django一个保护机制用来防止跨站攻击 eg: form action/blog/register/ methodpost姓名input typetext nameusernamebr密码input typetext namepswbrinput typesubmit
/form 报错信息 Forbidden (403) CSRF verification failed. Request aborted. You are seeing this message because this site requires a CSRF cookie when submitting forms. This cookie is required for security reasons, to ensure that your browser is not being hijacked by third parties. If you have configured your browser to disable cookies, please re-enable them, at least for this site, or for same-origin requests. 添加后顺利提交 form action/blog/register/ methodpost姓名input typetext nameusernamebr密码input typetext namepswbrinput typesubmit{% csrf_token %}
/form d、{% url %} 引用路由配置的地址 eg: form action{% url reg %} methodpost姓名input typetext nameusernamebr密码input typetext namepswbrinput typesubmit{% csrf_token %}
/form req为路由配置中的别名 e、{% verbatim %}: 禁止render有开始就有结束{% endverbatim %} 包含在其中的代码将不被render渲染 f、{% load %}: 加载标签库 g、{% with %}:用更简单的变量名替代复杂的变量名,需要{% endwith %} eg: {% with sqwer %}{{ s }}
{% endwith %} 注意sqwer之间不得有空格否则报错 3、自定义filter和simple_tag a、在app中创建templatetags模块(必须的) b、创建任意 .py 文件如mytag.py eg 自定义 from django import template
from django.utils.safestring import mark_saferegister template.Library()#变量名必须时registerregister.filter
def filter_mul(a, b):return a*bregister.simple_tag()
def tag_mul(a, b):return a*b 如何使用 在html文件的第一行加载{% load mytag %}即可这里创建的文件为mytag.py eg {% load mytag %}
!DOCTYPE html
html langen
headmeta charsetUTF-8titleBBU/title
/head 需要注意的是 filter可以用在if等语句后simple_tag不可以 三、模板的继承 1、如果在模板中使用 {% extends %} 必须保证其为模板中的第一个模板标记。 否则模板继承将不起作用。 2、一般来说基础模板中的 {% block %} 标签越多越好。 记住子模板不必定义父模板中所有的代码块因此你可以用合理的缺省值对一些代码块进行填充然后只对子模板所需的代码块进行重定义。 俗话说钩子越多越好 3、如果发觉自己在多个模板之间拷贝代码你应该考虑将该代码段放置到父模板的某个 {% block %} 中。如果你需要访问父模板中的块的内容使用 {{ block.super }}这个标签吧这一个魔法变量将会表现出父模板中的内容。 如果只想在上级代码块基础上添加内容而不是全部重载该变量就显得非常有用了 4、不允许在同一个模板中定义多个同名的 {% block %} 。 存在这样的限制是因为block 标签的工作方式是双向的。也就是说block 标签不仅挖了一个要填的坑也定义了在父模板中这个坑所填充的内容。如果模板中出现了两个相同名称的 {% block %} 标签父模板将无从得知要使用哪个块的内容 eg a、创建base.html模板 !DOCTYPE html
html langen
headmeta charsetUTF-8titleTitle/title
/head
body
{% block base1 %}
p我是模板/p
{% endblock %}
form action{% url reg %} methodpost姓名input typetext nameusernamebr密码input typetext namepswbrinput typesubmit{% csrf_token %}
/form
/body
/html b、创建子模板register.html并利用{{ block.super }}输出父模板中代码块中的内容 {% extends base.html %} #继承自base.html{% block base1 %}p{{ s }}/p #s为后端传入的变量{{ block.super }}
{% endblock %} 访问register.html 转载于:https://www.cnblogs.com/sumcet/p/8996723.html