plantilla plantillas de Django

plantilla plantillas de Django

Los valores de configuración

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]  #别忘了配置这个路径
        ,
        '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',
            ],
        },
    },
]

sintaxis de la plantilla

{{ 变量 }}  {% 逻辑 %}

período Todopoderoso No. .

<h1>{{ num }}</h1>
<h1>{{ s }}</h1>
<h1>{{ l1.1 }}</h1>
<h1>{{ d1.number }}</h1>
<h1>{{ a.yue }}</h1>  <!-- 注意,调用方法时不能加括号,所以如果方法带参数就没法用了 -->
<h1>{{ a.xx }}</h1>

views.py fraseología

def home(request):

    num = 100
    s = 'hello my girl I love you'
    l1 = [11,22,33]
    d1 = {'name':'冠希哥','number':1000}
    class A:
        balance = 2000
        def __init__(self):
            self.xx = 'oo'
        def yue(self):
            return 'how much!'
    a = A()
    # render({'xx':'oo'})
    return render(request,'home.html',{'num':num,'s':s,'l1':l1,'d1':d1,'a':a})

filtro

Uso del filtro:

{{ 变量|过滤器名称:'参数' }}

No todos los filtros tienen parámetros, no hay parámetros, a continuación, el texto:

{{ 变量|过滤器名称 }}

El filtro incorporado

<h1>{{ s|truncatechars:n }}</h1> # 过滤器里面的参数都可以写后端返回的变量

default -- <h1>{{ xx|default:'抱歉,没有数据!!' }}</h1> # 默认值
length  -- <h1>{{ l1|length }}</h1>  # 获取变量数据长度
filesizeformat -- <h2>{{ file_size|filesizeformat }}</h2> # 大小按照人类可读的显示
slice -- <h2>{{ s|slice:'0:7' }}</h2> #切片 顾头不顾腚
date -- <h3>{{ now|date:'Y-m-d H:i:s' }}</h3>  # 日期格式化显示
safe -- <h1>{{ a_tag|safe }}</h1> # 数据:a_tag = "<a href='http://www.baidu.com'>百度</a>"
truncatechars -- <h1>{{ s|truncatechars:'6' }}</h1>   # 如果字符串字符多于指定的字符数量,那么会被截断。可用来截取长文本为一行。
join -- <h1>{{ l1|join:'+' }}</h1>    # 将数组拼接成字符串
introducción segura

plantillas de Django durante la plantilla cuando representación etiquetas HTML será sintáctica y etiquetas JS escapado de forma automática. Por razones obvias, esto es para la seguridad. Django preocupado de que estos datos se añade por el usuario, por ejemplo, si alguien le da algo de tiempo para escribir comentarios js código. Esta opinión una presentación, JS amigos ejecución de código. Por lo que no son capaces de llevar a cabo algunas de las malas hijo, escribir un ciclo de estallido de la muerte, y que el navegador pueda usarlo, ¿no será siempre el pop ah. Esto se conoce como ataque XSS. Por lo que el navegador no permitirá que lo hace, usted escapó. Pero a veces puede que no desee que estos elementos HTML se escapan, por ejemplo, hacemos un sistema de gestión de contenidos, añade el fondo del artículo es modificado, estas modificaciones pueden ser criados por un FCKeditor similares de editar el código HTML modificador texto, escapó, a continuación, aparece automáticamente si el archivo de origen es proteger a las etiquetas HTML. Para apagar el Django automática escapó HTML de dos maneras, si se trata de un filtro variable separada podemos |safedecir Django manera el código es seguro no tiene que ser escapado.

etiqueta

La etiqueta de bucle

Ejemplo:

<ul>
    {% for i in l1 %}  # 循环列表
        <li>{{ i }}</li>
    {% endfor %}
</ul>

<ul>
    {% for i in l1 reversed %}  # 翻转循环列表时
        <li>{{ i }}</li>
    {% endfor %}
</ul>

<ol>
    {% for key in d1.keys %}  # 循环字典的键
        <li>{{ key }}</li>

    {% endfor %}
    {% for key in d1.values %} # 循环字典的值
        <li>{{ key }}</li>

    {% endfor %}
    {% for key,value in d1.items %} # 循环字典的键值对
{#        {{ forloop.counter }}#}
        <li>{{ forloop.last }}>>>>{{ key }}---{{ value }}</li>
        {% for foo in d1.hobby %}
            {{ forloop.parentloop.counter }}---{{ forloop.counter }}<a href="">{{ foo }}</a>

        {% endfor %}

    {% endfor %}

</ol>

forloop recuento

forloop.counter            当前循环的索引值(从1开始),forloop是循环器,通过点来使用功能
forloop.counter0           当前循环的索引值(从0开始)
forloop.revcounter         当前循环的倒序索引值(从1开始)
forloop.revcounter0        当前循环的倒序索引值(从0开始)
forloop.first              当前循环是不是第一次循环(布尔值)
forloop.last               当前循环是不是最后一次循环(布尔值)
forloop.parentloop         本层循环的外层循环的对象,再通过上面的几个属性来显示外层循环的计数等

Determinar si el objeto iterador vacío está vacía

{% for i in l1 %} #当没有数据时,会生成empty的内容
    <li>{{ i }}</li>
{% empty %}
    <p>啥数据也没有!</p>
{% endfor %}

si la etiqueta

Si los soportes de los estados and, or, ==, >, <, !=, <=, >=, in, not in, is, is notjuicio, atención a las condiciones en ambos lados espacios.

condición individual se determina
{% if num == 11 %}
    <a href="">详细些</a>
{% else %}
    <p>hahahhahah</p>
{% endif %}
Multi-condicional
{% if num > 100 or num < 0 %}
    <p>无效</p>  <!--不满足条件,不会生成这个标签-->
{% elif num > 80 and num < 100 %}
    <p>优秀</p>
{% else %}  <!--也是在if标签结构里面的-->
    <p>凑活吧</p>
{% endif %}
Utilizado conjuntamente con la filtración
{% if user_list|length > 5 %}  <!--结合过滤器来使用-->
七座豪华SUV
{% else %}
黄包车
{% endif %}

con la etiqueta

<h1>
    {% with l2.1.name as sb  %}  # 给长的数据调用起名字,只能在with标签内部使用
        {{ sb }}  
        <a href="">{{ sb }}</a>
    {% endwith %}
{#    {{ l2.1.name }}#}
</h1>

{% with total=business.employees.count %}
    {{ total }} <!--只能在with语句体内用-->
{% endwith %}

Tenga en cuenta que, recuerde que debe utilizar la etiqueta endwith cerrada con la etiqueta y el alias sólo funciona un par con la etiqueta cerrado.

mecanismo de autenticación csrf_token por csrf

Cuando se utiliza el formulario de presentación de Django marco posterior, se quejará. Recuerde que al configurar los ajustes dentro del middleware dentro de un mecanismo de defensa csrf de cancelar. Pero realmente no registramos fuera de él, pero hay que aprender a usarlo, y deje que su funcionamiento es prohibido. Ser capaz de obtener a través del sello csrf_token.

Esta etiqueta se usa para prevenir cross-site falsificación de petición (petición Cross-site falsificación, csrf).

En las páginas de la forma la forma interior (nota de la forma en la que la forma) escrito en cualquier posición

{% csrf_token %}

Reemplazado con algo que ocultar esta plantilla cuando se representa <input type="hidden" name="csrfmiddlewaretoken" value="8J4z1wiUEXt0gJSN59dLMnktrXFW0hv7m4d40Mtl37D7vJZfrxLir9L3jSTDjtG8">la etiqueta. El valor de esta etiqueta es una cadena aleatoria. Cuando se envía el formulario, esto también se ha presentado. Debido a esto es la parte final al renderizar la página que desea agregar, al momento de enviar datos a través de un formulario Te voy a dar una forma, se toma el contenido que te conozco, no con, te lo prohíbo. Debido a que el fondo también mantiene una Django esto, y que el mismo valor que un valor que se puede hacer para verificar la correspondencia no se te doy un token.

Almacenar estos valores de cosas detrás de nosotros para aprender, ya sabes primer clic en la línea, al igual que uno de nosotros de nuevo a los usuarios de un pasaporte, si usted los usuarios no tienen que publicar como yo os daré los datos normales Formulario de presentación de la página, o no me pide que vaya a esta página de destino, pero simular directamente una petición de presentar los datos, entonces yo puedo decir que la solicitud es, anti-reptil ilegal o un ataque malicioso en mi sitio web, middleware más tarde, cuando bien digo esto, pero ahora se quiere entender cómo, para entender por qué Django agregar este juego de defensa.

después de reptiles
import requests

ret = requests.post('http://127.0.0.1:8000/login/', data={
    'uname':'chao',
    'pwd':'123',
})
print(ret.content.decode('utf-8'))

herencia de plantillas

Django motor de plantillas es la parte más potente y más compleja de la plantilla que se hereda. herencia de plantillas te permite crear una base "esqueleto" de plantilla que contiene todos los elementos de su sitio, y se puede definir plantillas de edredón bloques pueden cubiertos.

Las plantillas personalizadas:

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" href="style.css" />
    <title>{% block title %}My amazing site{%/span> endblock %}</title>
</head>

<body>
    <div id="sidebar">
        {% block sidebar %}
        <ul>
            <li><a href="/">Home</a></li>
            <li><a href="/blog/">Blog</a></li>
        </ul>
        {% endblock %}
    </div>

    <div id="content">
        {% block content %}{% endblock %}
    </div>
</body>
</html>

Esta plantilla, lo llamamos base.html, define un simple esqueleto HTML puede ser utilizado en un diseño de dos páginas. "Sub plantilla" trabajo con su contenido llena los bloques vacíos.

En este ejemplo, etiqueta de bloque define el contenido de la plantilla puede ser bloque de sub-tres-llenado. bloque le dice al motor de la plantilla: plantilla hija puede sobreescribir las plantillas en estos lugares.

plantilla hija podría tener este aspecto:

{% extends "base.html" %}
 
{% block title %}My amazing blog{% endblock %}
 
{% block content %}
{% for entry in blog_entries %}
    <h2>{{ entry.title }}</h2>
    <p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}

se extiende etiqueta es la clave aquí. Se le dice al motor de plantillas que esta plantilla "heredó" otra plantilla. Cuando el sistema procesa la plantilla de la plantilla, en primer lugar, se localiza la plantilla padre - en este caso, es base.html.

En ese momento, el motor de plantillas se dará cuenta de base.htmlla etiqueta de tres bloques, y con el contenido de la plantilla hija para reemplazar el bloque.

block.super

{% block content %}
    {{ block.super }} # 将模板中的content这个名称的块中的内容拿过来
    菜单1的内容
{% endblock %}

Para facilitar la lectura, también se puede dar a su bloque final de una etiqueta de nombre . Por ejemplo:

{% block content %}
...
{% endblock content %}  

paquete

  1. Escribir un componente .htmlde archivos
  2. En el uso de este componente htmldel archivo, escriba el siguiente contenido
{% include 'zujian.html' %}

Las etiquetas personalizadas y filtros

  1. Crear una carpeta de la aplicación aplicación templatetagsúnica carpeta, el nombre del módulotemplatetags

  2. Crear los archivos .py, tales como:my_tags.py

  3. escribir el archivo de la siguiente, y filtros personalizados (hasta dos parámetros)

    from django import template
    register = template.Library()  #register变量名称必须是它
    @register.filter  
    def oo(v1,v2):
        print(v1)
        return v2 + v1 + 'oo'
  4. Se utiliza en el archivo html escribir el siguiente código

    {% load mytags %}
    <h1>{{ name|oo:'xxxx' }}</h1>
  5. Las etiquetas personalizadas, y el proceso que el anterior, pero el decorador cambiado, pero también el uso de diferentes

    @register.simple_tag
    def ootag(v1,v2,v3):  #参数没有限制
        print(v1,v2,v3)
        return v1 + 'ootag!!' + v2 + v3
  6. Dado que el uso de etiquetas personalizadas

    {% load mytags %}
    <h1>{% ootag name 'sss' '1111'%}</h1>
  7. inclusion_tag, etiqueta de componente, véase la ilustración:

    1574154069760

archivo de configuración estática

En el proyecto, js, css, JGP imágenes, etc son conocidos como archivos estáticos.
En Django usa:

  1. Configuración. En settingsel fichero de configuración y escribir las siguientes configuraciones:

    STATIC_URL = '/static/' #127.0.0.1:8000/static/bootstrap/css.
    
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR,'jingtaiwenjianjia'),    # 文件夹名称尽量不要和别名的名称冲突
    ]
  2. html Utilizado en el archivo:

    <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">

    Cuando una ruta relativa para introducir los archivos estáticos, hay que añadir barra frontal. Sea lo que sea, una etiqueta es la misma, la ruta de acceso relativa debe ser añadido en frente de la barra.

Además, también podemos crear un archivo llamado aplicación estática subcarpeta en el proyecto, el archivo estático en el interior. En este momento, ya no settings.pyen cualquier configuración. En comparación con la forma anterior, es más comúnmente utilizado este método. Debido a que los archivos estáticos de importación de esta manera, PyCharm estará operando consejos.

Cuando está en uso, la parte superior de la declaración de la página html para cargar archivos estáticos:

{% load static %}

En la ficha, puede encontrar nuestro método estático directa de archivos estáticos:

<link rel="stylesheet" href="{% static bootstrap-3.3.7-dist/css/bootstrap.min.css %}">

Escrita en el archivo HTML es:

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
</head>
<body>

</body>
<script src="{% static 'jquery.js' %}"></script>
<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>
</html>

Supongo que te gusta

Origin www.cnblogs.com/shuoliuchina/p/12521545.html
Recomendado
Clasificación