绝对路径:
相对路径:
第一个字符不带斜杠
例如:”hello”,这种会在当前url中path段往后添加,假设你当前路径http://www.baidu.com:8000/hello, 系统会自动匹配为“http://www.baidu.com:8000/hello/hello, ”。
settings中模板路径配置
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',
],
},
},
]
class Login(View):
def get(self, request):
return HttpResponse("hello world
")
class Login(View):
def get(self, request):
return render(request, "login.html")
class Login(View):
def get(self, request):
t = get_template("login.html")
return HttpResponse(t.render())
模板引擎的选择:
django自带一套模板系统,叫做DTL(Django Template Language),此外python还有一套模板引擎:Jinja2。
具体使用哪一套模板系统可以在settings中进行配置:
TEMPLATES = [
{
www',
'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',
],
},
},
]
在模板中定义变量的方法:
例如:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
{{ message }}
body>
html>
例如:
{% if now %}
当前时间: {{ now|date:"Y-m-d H:i:s" }}
{% endif %}
for…in…:跟python中的for…in…是一样的用法
{% for m in modules %}
{{ m }}
{% end %}
{{message|lower|capfirst}}
{{message|cut:" "}}
PS:使用参数的时候,冒号和参数之间不能有任何空格,一定要紧挨着。模板继承
base.html
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
{% block js %}
{% endblock js %}
head>
<body>
{% block content %}
{% endblock content %}
body>
html>
login.html
{% extends "base.html" %}
{% block content %}
这是一个登录页面
{% endblock %}
include另一个模板
{% include "menu.html" %}
注释标签
比如,我们现在有一个account的app
account
├── admin.py
├── apps.py
├── __init__.py
├── __init__.pyc
├── migrations
│ └── __init__.py
├── models.py
├── templatetags
│ ├── custom_tags.py
│ └── __init__.py
需要使用自定义过滤器,必须把对应的app加载,在settings中添加该app,假设我需要使用account下的自定义标签
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'account'
]
添加对应的自定义标签
#装饰器方法仅适用于 使用def函数渲染模板的时候,不适用于View.
from django import template
register = template.Library()
@register.filter
def mycut(value, args):
return value.replace(args, "").lower()
ps: register = template.Library() register的命名是固定的,不能修改
在模版中使用
{{ name|mycut:" " }}
ps: 创建完templatetags模块后,你需要重启服务器。
ps: 在模板中加载的是过滤器所在的文件名,而不是app的名称。
ps: pycharm创建文件夹时,不会自动上传
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static")
]
在需要使用的html模版头部中添加导入
{% load static %}
使用
<script src="{% static '/js/jquery.min.js' %}">script>
ps: 引入的路径是一个相对路径