参考:
[1] https://www.runoob.com/django/django-template.html
设置视图模板是为了使“数据与视图分离”。
settings.py 中
'DIRS': [os.path.join(BASE_DIR, 'templates')], # 修改位置
templates/runoob.html 中:
<h1>{{ hello }}</h1>
views.py 中:
def runoob(request): context = {} context['hello'] = 'Hello World!' return render(request, 'runoob.html', context)
urls.py 中:
urlpatterns = [ path('runoob/', views.runoob), ]
Ref. [1] 中还有很多关于模板的内容,但大多数我估计用不着,所以只摘录一点点似乎用得着的:
动作函数:
def runoob(request): import datetime now =datetime.datetime.now() return render(request, "runoob.html", {"time": now})
runoob.html:
{{ time|date:"Y-m-d" }}
效果:
2020-05-16
Django 会自动对 views.py 传到 HTML 文件中的标签语法进行转义,令超链接语义失效。加 safe 过滤器是告诉 Django 该数据是安全的,不必对其进行转义,可以让该数据语义生效。
例如,views.py 中:
def runoob(request): views_str = "<a href='https://www.runoob.com/'>点击跳转</a>" return render(request, "runoob.html", {"views_str": views_str})
runoob.html中:
{{ views_str|safe }} # 加这个 safe 才会有超链接
{% if condition1 %} ... display 1 {% elif condition2 %} ... display 2 {% else %} ... display 3 {% endif %}
可以嵌套使用。例如 views.py 中:
def runoob(request): views_num = 88 return render(request, "runoob.html", {"num": views_num})
runoob.html 中:
{%if num > 90 and num <= 100 %} 优秀 {% elif num > 60 and num <= 90 %} 合格 {% else %} 一边玩去~ {% endif %}
{% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% endfor %}
例如:views.py 中:
def runoob(request): views_list = ["菜鸟教程","菜鸟教程1","菜鸟教程2","菜鸟教程3",] return render(request, "runoob.html", {"views_list": views_list})
runoob.html 中:
{% for i in views_list %} {{ i }} {% endfor %}
感觉如果能学一下 html 语言,会比较有帮助。
例如:
{% for i in listvar %} {{ forloop.counter0 }} {% empty %} 空空如也~ {% endfor %}