Python Template.render方法

Template
字符串模板,用于替换字符串中的变量。

模板字符串支持基于$的替换,并遵循以下规则:

$$:被替换为$
$变量:标识符仅限以下划线或者字符开头的字母数字字符串(包括下划线),字符后的第一个非标识符字符终止此占位符规
变量:等同于 {变量}:等同于 变量:等同于变量,当有效标识符位于占位符之后但是不属于占位符是,必须用此种方式,比如${age}age
此类的方法:

substitute(mapping={}, /, **kwds):执行模板替换并返回一个新字符串。映射是任何类似于字典的对象,其键与模板中的占位符匹配。
safe_substitute(mapping={}, /, **kwds):与substitute()相似。不同之处在于,如果映射和kwds中缺少占位符,而不是引发KeyError异常,则原始占位符将完整显示在结果字符串中。

Python中template.Template.render方法的典型用法代码示例:
https://vimsky.com/examples/detail/python-ex-template-Template-render-method.html

示例1: default
def default(self):
        """
        Default action fetches all the stats and renders a template using them
        """
        stats = {}

        # get all the thumbnails
        stats["Database stats"] = [
            ("Number of marked files", Photo.get_num_marked_photos(), "raw"),
            ("Number of DB files", Photo.get_count_by_date(), "raw")
        ]

        stats["File System stats"] = []
        for s in [Photo.SMALL_THUMB_SIZE, Photo.MEDIUM_THUMB_SIZE]:
            stats["File System stats"].extend(self._thumb_info(s))
            
        num_images = 0
        total_size = 0
        for root, dirs, files in os.walk(S.BASE_FS_PATH):
            for f in files:
                if util.is_image_file(f):
                    num_images += 1
                    total_size += os.path.getsize(os.path.join(root, f))
        stats["File System stats"].extend([
            ("Number of source images", num_images, "raw"),
            ("Disk space", total_size, "bytes")
        ])

        return self.construct_response(Template.render("stats.html", {"stats": stats}))
示例2: get_dirs_from_date
 def get_dirs_from_date(self):
        """
        Renders a list of all the year "folders" in the system.

        As we're not rendering any photos, we can assume this to be a separate
        function from the photo fetching and rendering; this is just reporting
        certain dates.
        """
        path = self._env.get('PATH_INFO', '').lstrip('/')
        path = os.path.relpath(path, "photos")
        Logger.debug(path)
        path_parts = path.split(os.sep)
        if len(path_parts) == 1 and path_parts[0] == ".":
            path_parts = []

        year = None if len(path_parts) < 1 else path_parts[0]
        month = None if len(path_parts) < 2 else path_parts[1]
        list = Photo.get_all_dates(year=year, month=month)

        list = [("0%d" % f if f < 10 else str(f)) for f in list]
        list.sort()
        tokens = {
            "dirs": list,
            "year": year,
            "month": month
        }
        return self.construct_response(Template.render("photos/dirs.html", tokens))
示例3: get_photos_from_date
def get_photos_from_date(self):
        """
        Fetches a list of photos which apply to the given filter

        This function should be able to handle listing directories (for instance,
        month directories in the year or days in each month) as well as actually
        rendering photos.
        """
        year, month, day = self._get_id_from_path("").split(os.sep)

        offset = self._get_from_query("page", 1) - 1
        limit = self._get_from_query("limit", S.DEFAULT_PER_PAGE)

        num_photos = Photo.get_count_by_date(year=year, month=month, day=day)
        start_index = (offset * limit) + 1
        end_index = min(((offset + 1) * limit), num_photos)

        photos = Photo.get_by_date(year=year, month=month, day=day, limit=limit,
            offset=(offset * limit))
        tokens = {
            "photos": photos,
            "offset": offset,
            "limit": limit,
            "start_index": start_index,
            "end_index": end_index,
            "num_photos": num_photos
        }
        return self.construct_response(Template.render("photos/list.html", tokens))
示例4: preview
def preview(self):
        """
        Presents a preview of the files to be imported, giving the user an
        opportunity to view and change dates for images, highlighting images
        which may already be in the system, and the like.
        """
        rel_import_dir = os.path.relpath(self._env.get("PATH_INFO", "").lstrip("/"), "import/preview")
        import_dir = os.path.realpath(os.path.join(S.IMPORT_DIR, rel_import_dir))
        file_listing = []
        import_identifier = hashlib.sha1()
        hashes = []
        session_file_struct = {}
        for base_dir, _, files in os.walk(import_dir):
            for f in files:
                if not util.is_image_file(f):
                    continue
                fc = util.FileContainer(os.path.join(import_dir, f), S.IMPORT_DIR)
                ts = util.get_time(fc, allow_date_from_path=False)
                if ts["time"] != None:
                    fc.time = time.strftime("%Y-%m-%d %H:%M:%S", ts["time"])
                hashes.append(fc.hash)
                import_identifier.update(fc.hash)
                file_listing.append(fc)
                session_file_struct[fc.hash] = {
                    "file_data": fc.__dict__(),
                    "conflicts": None
                }
            break
        file_listing = sorted(file_listing, key=itemgetter('name'))
        conflicts = Photo.get_by_hash(hashes)

        for conflict_hash in conflicts.keys():
            conflicts_for_json = [c.id for c in conflicts[conflict_hash]]
            session_file_struct[conflict_hash]["conflicts"] = conflicts_for_json
            session_file_struct[conflict_hash]["file_data"]["marked"] = True
            Logger.debug(session_file_struct)

        session_id = import_identifier.hexdigest()
        session_data = {
            "file_listing": session_file_struct,
            "rel_dir": rel_import_dir,
            "session_id": session_id
        }
        with open(os.path.join("/tmp", "%s.txt" % session_id), "w+") as f:
            f.write(json.dumps(session_data))

        return self.construct_response(
            Template.render(
                "import/preview.html",
                {
                    "files": file_listing,
                    "import_id": session_id,
                    "import_dir": rel_import_dir,
                    "conflicts": conflicts
                }
            ),
            self._route_types.HTML_CONTENT_TYPE
        )
示例5: do_print
 def do_print(self, evt):
     # genero el renderizador con propiedades del PDF
     t = Template(elements=[e.as_dict() for e in self.elements if not e.static])
     t.add_page()
     if not t['logo'] or not os.path.exists(t['logo']):
         # put a default logo so it doesn't trow an exception
         logo = os.path.join(os.path.dirname(__file__), 'tutorial','logo.png')
         t.set('logo', logo)
     try:
         t.render(self.filename +".pdf")
     except:
         if DEBUG and False:
             import pdb;
             pdb.pm()
         else:
             raise
     if sys.platform=="linux2":
         os.system("evince ""%s""" % self.filename +".pdf")
     else:
         os.startfile(self.filename +".pdf")
示例6: rendered_events
def rendered_events(event_filter=None, ics_uri=None):
    start_time = time.time()

    event_filter = request.args.get('filter')
    ics_uri = request.args.get('input')
    image_map_path = request.args.get('images') or DEFAULT_IMAGE_MAP_PATH
    refresh = request.args.get('refresh')
    look_ahead_days = request.args.get('look_ahead_days') or MAX_LOOKAHEAD_DAYS
    if refresh is not None:
        try:
            refresh = int(refresh)
        except ValueError:
            pass

    template = Template(path=DEFAULT_TEMPLATE_PATH).get_template()

    if any([arg is None for arg in [event_filter, ics_uri]]):
        return template.render(error="Parameters missing")

    cal = Cal(ics_uri)

    today, today_events = cal.filter_events_today(event_filter)
    next_day, next_day_events = cal.filter_events_next_occurrence(
        event_filter, look_ahead_days)

    image_map = ImageMap(image_map_path)
    today_events = image_map.add_images(today_events)

    duration = time.time() - start_time
    return template.render(today_events=today_events,
                           today=today.strftime("%A, %-d %b %Y"),
                           next_day_events=next_day_events,
                           next_day=next_day.strftime("%A, %-d %b %Y"),
                           refresh=refresh,
                           filter_expr=event_filter,
                           last_updated=datetime.now().strftime("%A, %-d %b %Y %H:%M:%S"),
                           duration="{0:.3f}".format(duration))
示例7: test_if_else
 def test_if_else(self):
     t = Template('''
         {% if i > 3 %}
         {{ i }}
         {% else %}
         less than 3
         {% endif %}
         ''')
     _p = t.render(i=2)
     _s = t.render(i=4)
     self.assertEqual(_p, '''
         less than 3
         ''')
     self.assertEqual(_s, '''
         4
         ''')
示例8: test Text
 def testText(self):
     data = {
         'var1': 'var1',
         'var2': 'var2',
         'list': [
             {'var3': 'var3_1'},
             {'var3': 'var3_2'},
             {'var3': 'var3_3'},
             {'var3': 'var3_4'},
         ],
     }
     tmpl = Template(text="""
     text
     text
     text""")
     text1 = tmpl.render(data)
     text2 = b'text text text'
     self.assertEqual(text1, text2)
示例9: update_and_confirm
 def update_and_confirm(self):
        post_args = parse_qs(self._env["wsgi.input"].read())
        if "import_id" not in post_args.keys():
            raise Exception("need valid import_id")

        session_data = None
        session_id = post_args["import_id"][0]
        session_file_path = os.path.join("/tmp", "%s.txt" % session_id)
        with open(session_file_path, "r") as handle:
            session_data = json.loads(handle.read())

        delete_hashes = post_args["delete"] if "delete" in post_args.keys() else []
        file_listing = []
        conflicts = {}
        for file_hash in session_data["file_listing"].keys():
            file_data = session_data["file_listing"][file_hash]
            fc = util.FileContainer.from_dict(file_data["file_data"])
            if file_hash in delete_hashes: 
                fc.marked = True
            if "time_%s" % file_hash in post_args.keys():
                time_val = post_args["time_%s" % file_hash][0]
                fc.time = None if time_val == "None" else time_val
            session_data["file_listing"][file_hash]["file_data"] = fc.__dict__()
            file_listing.append(fc)
            if file_data["conflicts"] != None:
                conflicts[file_hash] = file_data["conflicts"]

        file_listing = sorted(file_listing, key=itemgetter('name'))
        
        with open(session_file_path, "w+") as handle:
            handle.write(json.dumps(session_data))

        return self.construct_response(
            Template.render(
                "import/confirm.html",
                {
                    "files": file_listing,
                    "import_id": session_id,
                    "import_dir": session_data["rel_dir"],
                    "conflicts": conflicts
                }
            ),
            self._route_types.HTML_CONTENT_TYPE
        )
示例10: get_marked_photos
def get_marked_photos(self):
        """
        Renders a list of marked files
        """
        offset = self._get_from_query("page", 1) - 1
        limit = self._get_from_query("limit", S.DEFAULT_PER_PAGE)
        photos = Photo.get_marked()
        num_photos = len(photos) 
        start_index = (offset * limit) + 1
        end_index = num_photos
        tokens = {
            "photos": photos,
            "offset": offset,
            "limit": limit,
            "start_index": start_index,
            "end_index": end_index,
            "num_photos": num_photos
        }
        return self.construct_response(Template.render("photos/mark.html", tokens))
示例11: test End
 def testEnd(self):
     data = {
         'var1': 'var1',
         'var2': 'var2',
         'list': [
             {'var3': 'var3_1'},
             {'var3': 'var3_2'},
             {'var3': 'var3_3'},
             {'var3': 'var3_4'},
         ],
     }
     tmpl = Template(text="""
     {% fot item in list:%}
     {% if var1 == var1: %}
     {{var1}}
     {% end %}
     """)
     text1 = tmpl.render(data)
     text2 = TemplateError('Parce error: unknown block operator {%fot item in list:%}')
     self.assertEqual(text1, text2)
示例12: test ForFor
 def testForFor(self):
     data = {
         'var1': 'var1',
         'var2': 'var2',
         'list2': [
             {'var3': [{'var4': 'var4_1_1'}, {'var4': 'var4_1_2'}, {'var4': 'var4_1_3'}]},
             {'var3': [{'var4': 'var4_2_1'}, {'var4': 'var4_2_2'}, {'var4': 'var4_2_3'}]},
             {'var3': [{'var4': 'var4_3_1'}, {'var4': 'var4_3_2'}, {'var4': 'var4_3_3'}]},
         ],
     }
     tmpl = Template(text="""
     {% for list1 in list2:%}
     //-{{var1}}
     {% for list0 in list1.var3:%}
     --
     {{list0.var4}}
     /{{var2}}
     {% end %}
     {% end %}""")
     text1 = tmpl.render(data)
     text2 = b'//-var1--var4_1_1/var2--var4_1_2/var2--var4_1_3/var2//-var1--var4_2_1/var2--var4_2_2/var2--var4_2_3/var2//-var1--var4_3_1/var2--var4_3_2/var2--var4_3_3/var2'
     self.assertEqual(text1, text2)

示例13: test For

 def testFor(self):
     data = {
         'var1': 'var1',
         'var2': 'var2',
         'list': [
             {'var3': 'var3_1'},
             {'var3': 'var3_2'},
             {'var3': 'var3_3'},
             {'var3': 'var3_4'},
         ],
     }
     tmpl = Template(text="""
     text
     {{var1}}
     text
     {{var2}}
     text
     {% for item in list:%}
     {{item.var3}}
     {% end %}""")
     text1 = tmpl.render(data)
     text2 = b'textvar1textvar2textvar3_1var3_2var3_3var3_4'
     self.assertEqual(text1, text2)
示例14: test If
def testIf(self):
     data = {
         'var1': 'var1',
         'var2': 'var2',
         'list': [
             {'var3': 'var3_1'},
             {'var3': 'var3_2'},
             {'var3': 'var3_3'},
             {'var3': 'var3_4'},
         ],
     }
     tmpl = Template(text="""
     {% if var1 == var1: %}
     {{var1}}
     {% end %}
     {% if var2 != var2: %}
     {{var1}}
     {% else %}
     {{var2}}
     {% end %}
     {% if var1 == test: %}
     {{var1}}
     {% else %}
     {{var2}}
     {% end %}
     {% if var1 != test: %}
     {{var1}}
     {% else %}
     {{var2}}
     {% end %}
     {% else %}
     {{var2}}
     {% end %}
     """)
     text1 = tmpl.render(data)
     text2 = b'var1var2var2var1'
     self.assertEqual(text1, text2)
示例15: get

需要导入模块: from template import Template [as 别名]
或者: from template.Template import render [as 别名]

def get(self):
     template_values = {
         'word': "Hello World!"
     }
     t = Template("admin/login.html")
     self.response.write(t.render(template_values))
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值