首页 > 编程语言 > 详细

模版语言 实现瀑布流页面

时间:2017-04-11 17:07:00      阅读:172      评论:0      收藏:0      [点我收藏+]

模板

1、模版的执行

模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户。

技术分享技术分享
def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)
View Code
技术分享技术分享
from django import template
t = template.Template(‘My name is {{ name }}.‘)
c = template.Context({‘name‘: ‘Adrian‘})
print t.render(c)
View Code
技术分享技术分享
import datetime
from django import template
import DjangoDemo.settings
 
now = datetime.datetime.now()
fp = open(settings.BASE_DIR+‘/templates/Home/Index.html‘)
t = template.Template(fp.read())
fp.close()
html = t.render(template.Context({‘current_date‘: now}))
return HttpResponse(html
View Code
技术分享技术分享
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
import datetime
 
def current_datetime(request):
    now = datetime.datetime.now()
    t = get_template(‘current_datetime.html‘)
    html = t.render(Context({‘current_date‘: now}))
    return HttpResponse(html)
View Code
技术分享技术分享
return render_to_response(‘Account/Login.html‘,data,context_instance=RequestContext(request))
View Code

2、模版语言

 模板中也有自己的语言,该语言可以实现数据展示

  • {{ item }}
  • {% for item in item_list %}  <a>{{ item }}</a>  {% endfor %}
      forloop.counter
      forloop.first
      forloop.last 
  • {% if ordered_warranty %}  {% else %} {% endif %}
  • 母板:{% block title %}{% endblock %}
    子板:{% extends "base.html" %}
       {% block title %}{% endblock %}
  • 帮助方法:
    {{ item.event_start|date:"Y-m-d H:i:s"}}
    {{ bio|truncatewords:"30" }}
    {{ my_list|first|upper }}
    {{ name|lower }}

3、自定义simple_tag

a、在app中创建templatetags模块

b、创建任意 .py 文件,如:xx.py

c、在使用自定义simple_tag的html文件中导入之前创建的 xx.py 文件名

1
{% load xx %}

d、使用simple_tag

1
2
{% my_simple_time 1 2 3%}
{% my_input ‘id_username‘ ‘hide‘%}

e、在settings中配置当前app,不然django无法找到自定义的simple_tag  

1
2
3
4
5
6
7
8
9
INSTALLED_APPS = (
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    ‘app01‘,
)

更多见文档:https://docs.djangoproject.com/en/1.10/ref/templates/language/

views.py

 1 import json
 2 from django.shortcuts import render,HttpResponse
 3 from app01 import models
 4 # Create your views here.
 5 def index(request):
 6     # models.BxSlider.objects.filter(status=1) 对象
 7     queryset_dict = models.BxSlider.objects.filter(status=1).values(img,href,name)
 8     # queryset_list = models.BxSlider.objects.filter(status=1).values_list(‘img‘,‘href‘,‘name‘)
 9     return render(request,index.html, {queryset_dict: queryset_dict})
10 
11 def student(request):
12 
13     # student
14     # studentDetail
15     detail_list = models.StudentDetail.objects.filter(student__status=1).values(letter_of_thanks,"student__name","student__salary",student__company, student__pic)
16     print(detail_list)
17     return render(request,student.html, {detail_list: detail_list})

技术分享

student.html

 1 {% load xx %}
 2 <!DOCTYPE html>
 3 <html lang="en">
 4 <head>
 5     <meta charset="UTF-8">
 6     <title>Title</title>
 7     <style>
 8         .clearfix:after{
 9             content: .;
10             visibility: hidden;
11             height: 0;
12             clear: both;
13             display: block;
14         }
15     </style>
16 </head>
17 <body>
18 
19     <div>
20 
21     </div>
22 
23 
24     <div style="margin: 0 auto;width: 980px;" class="clearfix">
25         <div style="width: 245px;float: left">
26             {% for item in detail_list %}
27 
28                 {% detail1 item forloop.counter 4 1 %}
29 
30             {% endfor %}
31         </div>
32         <div style="width: 245px;float: left">
33             {% for item in detail_list %}
34                 {% detail1 item forloop.counter 4 2 %}
35             {% endfor %}
36         </div>
37         <div style="width: 245px;float: left">
38             {% for item in detail_list %}
39                 {% detail1 item forloop.counter 4 3 %}
40             {% endfor %}
41 
42         </div>
43 {#        {{  forloop.counter|detail3 }}#}
44         <div style="width: 245px;float: left">
45              {% for item in detail_list %}
46                  {% if forloop.counter|detail3:"4,0" %}
47                     <div style="width: 245px;">
48                         <img style="width: 245px;height: 200px;" src="/{{ item.student__pic }}">
49                         <p>{{ item.student__name }}</p>
50                         <p>{{ item.student__salary }}</p>
51                         <p>{{ item.letter_of_thanks }}</p>
52                     </div>
53                  {% endif %}
54 
55             {% endfor %}
56 
57         </div>
58     </div>
59 
60 </body>
61 </html>

 xx.py

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 from django import template
 4 from django.utils.safestring import mark_safe
 5 from django.template.base import Node, TemplateSyntaxError
 6 
 7 register = template.Library()
 8 
 9 @register.simple_tag
10 def my_simple_time(v1,v2,v3):
11     return  v1 + v2 + v3
12 
13 @register.simple_tag
14 def detail1(item,counter,allcount,remainder):
15     temp = """
16         <div style="width: 245px;">
17             <img style="width: 245px;height: 200px;" src="/%s">
18             <p>%s</p>
19             <p>%s</p>
20             <p>%s</p>
21         </div>
22         """
23     if counter%allcount == remainder:
24         temp = temp %(item[student__pic],
25                       item[student__name],
26                       item[student__salary],
27                       item[letter_of_thanks])
28         return mark_safe(temp)
29     else:
30         return ""
31 
32 @register.simple_tag
33 def detail2(counter,allcount,remainder):
34     """
35     查看余数是否等于remainder
36     :param counter:
37     :param allcount:
38     :param remainder:
39     :return:
40     """
41     if counter%allcount == remainder:
42         return True
43     return False
44 
45 @register.filter
46 def detail3(value,arg):
47 
48     """
49     查看余数是否等于remainder arg="1,2"
50     :param counter:
51     :param allcount:
52     :param remainder:
53     :return:
54     """
55     allcount, remainder = arg.split(,)
56     allcount = int(allcount)
57     remainder = int(remainder)
58     if value%allcount == remainder:
59         return True
60     return False

 

模版语言 实现瀑布流页面

原文:http://www.cnblogs.com/shiluoliming/p/6693894.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!