一个通用类,以便于创建复杂的模板标记。
icm-django-easytag的Python项目详细描述
django easytag
==
一个模板标记实用程序,可以大大简化块样式标记的设计
子类来处理任何自定义的中间标记分隔符(想想"for`/``empty`,``if`/``else`)。
请参见下面的[在标记库中注册](在标记库中注册)了解如何使用此"name"属性而不必重复自己的操作。
此标记将自动解析为匹配的`{%end{name}%}`标记。如果"end_tag"是一个字符串,则它将被视为结束块标记。它也不会添加"end"前缀,所以请选择一个智能名称!
例如,如果使用``intermediate_tags=["除非"]````,则可以在模板中编写类似的内容:
``html
{%my_tag%}
某些内容
{%除非%}
secondary content
{%endmytag%}
``
呈现,但它们被传递给标记类上的单独方法进行处理,允许您动态决定是否或如何呈现同级分支。
如果你想强制执行一个特定的命令,您需要向特定处理程序添加一些逻辑,以验证是否先有其他标记。
这些方法是有效的呈现器;不管是否修改任何内容,都应该返回呈现的内容。
最简单的情况是传递标记:
``python
class my tag(easytag):
name="my_tag"
def my_tag(self,context,nodelist):
return nodelist.render(context)
```
my_tag``标记应该在其自身声明一个名为相同对象的方法。这是打包内容发送到的处理程序。"context"和"nodelist"参数是必需的。
包括纯文本块。
如果定义了中间标记,请注意"包装内容"的定义是如何变化的:
``html
<;!--示例模板使用-->;
{%my_tag%}
some content
{%除非%}
secondary content
{%endmytag%}
````
main``my_tag``方法只接收所有内容,直到下一个中间块,中间块接收所有信息,直到下一个中间块或结束标记,等等。
easytag允许将发送到标记的参数自动转发到标记上的方法。
这包括具有默认值的参数,``*args``和`**kwargs``用于catch all。如果参数丢失或意外,将引发正确的错误。
示例:
`` my tag类中的python
ntext,nodelist,myflag=false:
content=nodelist.render(context)
如果myflag为true:
content="<;div class="hidden">;%s<;/div>;"%(content,)
返回content
````
``html
<;!--在模板中-->;
{属性,它将是模板中使用的名称。这有助于您省去编写单独编译器函数的麻烦,只需将其包装在``@register.tag``decorator中即可。
建议:
mytagclass.register_tag(register)
+1如果您完全是普通的,没有魔法。
register.tag(mytagclass.name,mytagclass.parser)
`````
不能向easytag添加更简单的``register()``方法,因为easytag不会对您的标记的特定库实例有活动引用,因此它将被注册到错误的库在运行时。
\目标用法应该是这样的:
``html
{%my_tag active\u section="second"%}
{%section name="first"%}
一些内容
{%section name="second"%}
更多内容
{%endmy_tag%}
```
保存变量很简单在"my tag"处理程序上(尽管如果在存储状态值之后要修改它们,但是请确保准备好关于templatetag[thread safety]的django文档(https://docs.djangoproject.com/en/dev/howto/custom template tags/thread safety concertients)),一旦你完成了,检查这些值就很简单了:
``python
def my_tag(self,context,nodelist,active_section=none):
self.active_section=active_section
==self.active_节:
active_class="active"
否则:
active_class=
return wrapper%{active':active_class,"content":content}
`````
##包装整个标记输出、追加、前缀等
应该重写标记的内置"render()"方法。默认情况下,此方法在"template.node"对象上提供。"`easytag.render()`"实现迭代所有分支并连接它们的输出。
然后根据需要修改它:
``python
def render(self,context):
content=super(mytag,self)。render(context)
return"<;div id="wrapper">;%s<;/div>;"%content
```
您可能想在标记的末尾追加额外的输出。这在技术上是可能的,如上面所讨论的那样重写``render()``方法,但似乎应该承认结束标记是一个处理程序本身。
不管你设置成什么:
`` python
类my tag(easytag):
name="my_tag"
结束标记=真
…
def endmy_tag(self,上下文):
return"some trailing content"
```
注意在本例中没有``nodelist``参数,因为结束标记没有它影响的内容。返回一些字符串内容由您决定。
还请注意,当内容最终从"render()"方法返回为单个大字符串时,返回的字符串会自动通过Django通过"django.utils.safe string.mark_safe"发送。
有助于允许中间标记积累一些信息,但在标记结束之前不对其执行操作。
\更新应用程序中的"版本信息"。承诺并推动。
2.用版本标记发布。` git tag<;version>;-m"release";git push——tags`
3。构建发行版"rm-rf dist build*egon info;python setup.py sdist bdist廑wheel"
4。上传数据'tween upload dist/*`
==
一个模板标记实用程序,可以大大简化块样式标记的设计
子类来处理任何自定义的中间标记分隔符(想想"for`/``empty`,``if`/``else`)。
请参见下面的[在标记库中注册](在标记库中注册)了解如何使用此"name"属性而不必重复自己的操作。
此标记将自动解析为匹配的`{%end{name}%}`标记。如果"end_tag"是一个字符串,则它将被视为结束块标记。它也不会添加"end"前缀,所以请选择一个智能名称!
例如,如果使用``intermediate_tags=["除非"]````,则可以在模板中编写类似的内容:
``html
{%my_tag%}
某些内容
{%除非%}
secondary content
{%endmytag%}
``
呈现,但它们被传递给标记类上的单独方法进行处理,允许您动态决定是否或如何呈现同级分支。
如果你想强制执行一个特定的命令,您需要向特定处理程序添加一些逻辑,以验证是否先有其他标记。
这些方法是有效的呈现器;不管是否修改任何内容,都应该返回呈现的内容。
最简单的情况是传递标记:
``python
class my tag(easytag):
name="my_tag"
def my_tag(self,context,nodelist):
return nodelist.render(context)
```
my_tag``标记应该在其自身声明一个名为相同对象的方法。这是打包内容发送到的处理程序。"context"和"nodelist"参数是必需的。
包括纯文本块。
如果定义了中间标记,请注意"包装内容"的定义是如何变化的:
``html
<;!--示例模板使用-->;
{%my_tag%}
some content
{%除非%}
secondary content
{%endmytag%}
````
main``my_tag``方法只接收所有内容,直到下一个中间块,中间块接收所有信息,直到下一个中间块或结束标记,等等。
easytag允许将发送到标记的参数自动转发到标记上的方法。
这包括具有默认值的参数,``*args``和`**kwargs``用于catch all。如果参数丢失或意外,将引发正确的错误。
示例:
`` my tag类中的python
ntext,nodelist,myflag=false:
content=nodelist.render(context)
如果myflag为true:
content="<;div class="hidden">;%s<;/div>;"%(content,)
返回content
````
``html
<;!--在模板中-->;
{属性,它将是模板中使用的名称。这有助于您省去编写单独编译器函数的麻烦,只需将其包装在``@register.tag``decorator中即可。
建议:
mytagclass.register_tag(register)
+1如果您完全是普通的,没有魔法。
register.tag(mytagclass.name,mytagclass.parser)
`````
不能向easytag添加更简单的``register()``方法,因为easytag不会对您的标记的特定库实例有活动引用,因此它将被注册到错误的库在运行时。
\目标用法应该是这样的:
``html
{%my_tag active\u section="second"%}
{%section name="first"%}
一些内容
{%section name="second"%}
更多内容
{%endmy_tag%}
```
保存变量很简单在"my tag"处理程序上(尽管如果在存储状态值之后要修改它们,但是请确保准备好关于templatetag[thread safety]的django文档(https://docs.djangoproject.com/en/dev/howto/custom template tags/thread safety concertients)),一旦你完成了,检查这些值就很简单了:
``python
def my_tag(self,context,nodelist,active_section=none):
self.active_section=active_section
==self.active_节:
active_class="active"
否则:
active_class=
return wrapper%{active':active_class,"content":content}
`````
##包装整个标记输出、追加、前缀等
应该重写标记的内置"render()"方法。默认情况下,此方法在"template.node"对象上提供。"`easytag.render()`"实现迭代所有分支并连接它们的输出。
然后根据需要修改它:
``python
def render(self,context):
content=super(mytag,self)。render(context)
return"<;div id="wrapper">;%s<;/div>;"%content
```
您可能想在标记的末尾追加额外的输出。这在技术上是可能的,如上面所讨论的那样重写``render()``方法,但似乎应该承认结束标记是一个处理程序本身。
不管你设置成什么:
`` python
类my tag(easytag):
name="my_tag"
结束标记=真
…
def endmy_tag(self,上下文):
return"some trailing content"
```
注意在本例中没有``nodelist``参数,因为结束标记没有它影响的内容。返回一些字符串内容由您决定。
还请注意,当内容最终从"render()"方法返回为单个大字符串时,返回的字符串会自动通过Django通过"django.utils.safe string.mark_safe"发送。
有助于允许中间标记积累一些信息,但在标记结束之前不对其执行操作。
\更新应用程序中的"版本信息"。承诺并推动。
2.用版本标记发布。` git tag<;version>;-m"release";git push——tags`
3。构建发行版"rm-rf dist build*egon info;python setup.py sdist bdist廑wheel"
4。上传数据'tween upload dist/*`