介绍
本篇文章给大家分享的是有关怎么用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中上下文的上下文,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。