Django 模版 各种实用方法

xiaoxiao2021-02-28  116

一般的变量之类的用 {{ }}(变量),功能类的,比如循环,条件判断是用 {% %}

1.接受显示视图函数传过来的字符串

# -*- coding: utf-8 -*- from django.shortcuts import render def home(request): string = u"我在自强学堂学习Django,用它来建网站" return render(request, 'home.html', {'string': string})

前端用{{ string }}去接受

2.接受显示视图函数传过来的列表

def home(request): TutorialList = ["HTML", "CSS", "jQuery", "Python", "Django"] return render(request, 'home.html', {'TutorialList': TutorialList}) ```前端用for迭代取出内容 教程列表: <div class="se-preview-section-delimiter"></div>

{% for i in TutorialList %} {{ i }} {% endfor %} “`

{% for i in TutorialList %} {{ i }} {% endfor %}

3.接受显示视图函数传过来的字典

def home(request): info_dict = {'site': u'自强学堂', 'content': u'各种IT技术教程'} return render(request, 'home.html', {'info_dict': info_dict})

在模板中取字典的键是用点info_dict.site,而不是Python中的 info_dict[‘site’]: 站点{{ info_dict.site }} 内容:{{ info_dict.content }} 还可以这样遍历字典: {% for key, value in info_dict.items %} {{ key }}:{{ value }} {% endfor %}

4.在模板进行 条件判断和 for 循环的详细操作

发个list给前端

def home(request): List = map(str, range(100))# 一个长度为100的 List return render(request, 'home.html', {'List': List})

前端用逗号把取出来的元素分隔开

{% for item in List %} {{ item }}, {% endfor %}

最后还多个逗号,咱们要通过判断遍历到最后了把它去掉,咋搞?用forloop.last变量判断下,如果为真就到最后一个了

{% for item in List %} {{item}}{% if not forloop.last %},{% endif %} {% endif %}

在for循环中还有很多有用的东西 变量 描述 forloop.counter 索引从 1 开始算 forloop.counter0 索引从 0 开始算 forloop.revcounter 索引从最大长度到 1 forloop.revcounter0 索引从最大长度到 0 forloop.first 当遍历的元素为第一项时为真 forloop.last 当遍历的元素为最后一项时为真 forloop.parentloop 用在嵌套的 for 循环中,获取上一层 for 循环的 forloop

当列表中可能为空值的时候用 for empty

<ul> {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% empty %} <li>抱歉,列表为空</> {% endfor %} </ul>

5.模板上得到视图对应的网址

用{% url ‘add’ 4 5 %}

# views.py def add(request, a, b): c = int(a) + int(b) return HttpResponse(str(c)) # urls.py urlpatterns = patterns('', url(r'^add/(\d+)/(\d+)/$', 'app.views.add', name='add'), ) # template html {% url 'add' 4 5 %}

还可以使用 as 语句将内容取别名(相当于定义一个变量),多次使用(但视图名称到网址转换只进行了一次) {% url ‘some-url-name’ arg arg2 as the_url %} 链接到: {{ the_url }}

6.模板中的逻辑操作

==, !=, >=, <=, >, < 这些比较都可以在模板中使用, and, or, not, in, not in 也可以在模板中使用,但是比较符号前后必须有至少一个空格 {% if var >= 90 %} {% if num <= 100 and num >= 0 %}

7.模板中 获取当前网址,当前用户等

如果不是在 views.py 中用的 render 函数,是 render_to_response 的话,需要将 request 加入到 上下文渲染器

TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ ... 'django.template.context_processors.request', ... ], }, }, ]

然后再加上 django.core.context_processors.request

TEMPLATE_CONTEXT_PROCESSORS = ( ... "django.core.context_processors.request", ... )

然后在 模板中我们就可以用 request 了。一般情况下,推荐用 render 而不是用 render_to_response

获取当前用户

{{ request.user }} 判断登陆没登陆 {% if request.user.is_authenticated %} {{ request.user.username }},您好! {% else %} 还没登陆呢啥也看不了 {% endif %}

获取当前网址

{{ request.path }}

获取当前的GET参数

{{ request.GET.urlencode }}

合并到一起用的一个例子

当前网址加参数 delete

比如我们可以判断 delete 参数是不是 1 来删除当前的页面内容。

推荐学习: http://code.ziqiangxuetang.com/django/django-template2.html

转载请注明原文地址: https://www.6miu.com/read-47209.html

最新回复(0)