怎么用Django中上下文的上下文

  介绍

本篇文章给大家分享的是有关怎么用Django中上下文的上下文,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

很多时候设置一个模板变量而非返回值也很有用。那样,模板作者就只能使用模板标签所设置的变量。

要在上下文中设置变量,在渲染()函数的上下文中对象上使用字典赋值。这里是一个修改过的CurrentTimeNode,其中设定了一个模板变量当前时间,并没有返回它:

class  CurrentTimeNode2 (template.Node):   def 才能;__init__(自我,,format_string):   ,,,self.format_string =, str (format_string)   ,   def 才能使(自我,,背景):   ,,,你=,datetime.datetime.now ()   ,,,上下文(& # 39;当前时间# 39;],=,now.strftime (self.format_string)   ,,,return  & # 39; & # 39;

(我们把创建函数do_current_time2和注册给current_time2模板标签的工作留作读者练习。)

注意渲染()返回了一个空字符串。渲染()应当总是返回一个字符串,所以如果模板标签只是要设置变量,使()就应该返回一个空字符串。

你应该这样使用这个新版本的标签:

{%,current_time2 “Y % - % - % d 我%:% M  % p", %}   & lt; p>从而time  is  {{, current_time }}。;/p>

但是CurrentTimeNode2有一个问题:变量名当前时间是硬编码的。这意味着你必须确定你的模板在其它任何地方都不使用{{当前时间}},因为{% current_time2 %}会盲目的覆盖该变量的值。

一种更简洁的方案是由模板标签来指定需要设定的变量的名称,就像这样:

{%,get_current_time “Y % - % - % d 我%:% M  % p", as  my_current_time  %}   & lt; p>从而current  time  is  {{, my_current_time }}。;/p>

为此,你需要重构编译函数和节点类,如下所示:

import 再保险   ,   class  CurrentTimeNode3 (template.Node):   def 才能;__init__ (format_string,自我,还以为;var_name):   ,,,self.format_string =, str (format_string)   ,,,self.var_name =var_name   ,   def 才能使(自我,,背景):   ,,,你=,datetime.datetime.now ()   ,,,上下文(self.var_name),=, now.strftime (self.format_string)   ,,,return  & # 39; & # 39;   ,   def  do_current_time(解析器,,令牌):   #才能,却;能够version  uses  a  regular  expression 用parse  tag 内容。   尝试才能:   ,,,#,Splitting  by  None ==, Splitting  by 空间。   ,,,,,,tag_name arg =, token.contents.split(没有,,1)   except 才能;ValueError:   ,,,msg =, & # 39; % r  tag  requires 参数# 39;,%,token.contents [0]   ,,,raise  template.TemplateSyntaxError(味精)   ,   m 才能=,re.search (" # 39; (. * ?), as  (\ w +) & # 39;,, arg)   if 才能;m:   ,,,,fmt, var_name =, m.groups ()   其他的才能:   ,,,msg =, & # 39; % r  tag  had  invalid 参数# 39;,% tag_name   ,,,raise  template.TemplateSyntaxError(味精)   ,   if 才能;not  (fmt [0],==, fmt[1],以及fmt[0],拷贝(& # 39;“& # 39;,,“& # 39;“)):   ,,,msg =,“% r 标签# 39;s  argument  should  be  quotes"拷贝,% tag_name   ,,,raise  template.TemplateSyntaxError(味精)   ,   return 才能;CurrentTimeNode3 (fmt [1: 1), var_name)

现在do_current_time()把格式字符串和变量名传递给CurrentTimeNode3。

以上就是怎么用Django中上下文的上下文,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

怎么用Django中上下文的上下文