Django模板标记库,用于重复块标记和在模板宏中创建。
django-macros的Python项目详细描述
django宏
接受位置和关键字参数以及重复块的宏 django模板系统中的标记。有时包含标签只是不 把工作做完。要么你重复了你想保留的代码 都在同一个模板中,或者您的代码需要动态地 以include语法的方式生成和sub某些值 抑制。不管怎样,如果你发现内置的 标记不适用于您的用例,那么django宏可能是 为你。
访问github。
安装:
从命令行:
pip install django-macros
在settings.py中,将“宏”添加到已安装的应用程序:
INSTALLED_APPS=(...'macros',...)
用途:
django宏包含两个模板标记库,一个用于创建 模板中的宏,以及用于重复块标记的宏。
宏使用
说明用途
文件开头包括:
{% load macros %}
当你有模板的一部分时,你想重复,但不想 想要继承或任何其他类似块标记的功能,请定义 宏如下:
{% macro some_macro_name arg1 arg2 kwarg="default" %} {{ arg1 }} was the first argument. {{ arg2 }} was the second argument. {% if kwarg %}This is a {{ kwarg }}. {% endif %} {% endmacro %}
然后,当您想使用宏时,只需执行以下操作:
{% use_macro some_macro_name "foo" "bar" kwarg="nondefault value" %}
渲染到:
foo was the first argument. bar was the second argument. This is a nondefault value.
或者,可以将宏保存在单独的文件中,例如。 “mymacros.html”并将其加载到带有标记的模板中 {% loadmacros "mymacros.html" %}然后将它们与 {% use_macro ... %}标记。
所有宏(包括加载的宏)都是模板文件的本地宏 在中加载/定义,并且不通过 {% extends ... %}标记。
更深入的使用示例:
宏:
也可以在宏中输入模板变量,但过滤器是 不支持。也就是说,不能在参数中使用筛选器。
如果上下文中{foo':'foobar'}
{% macro test2args1kwarg arg1 arg2 baz="Default baz" %} {% firstof arg1 "default arg1" %} {% if arg2 %}{{ arg2 }}{% else %}default arg2{% endif %} {{ baz }} {% endmacro %} {% use_macro test2args1kwarg "foo" "bar" baz="KW" %} <br> {% use_macro test2args1kwarg num_pages "bar" %} <br> {% use_macro test2args1kwarg %}
呈现为:
foo bar KW 77 bar Default baz default arg1 default arg2 Default baz
扩展语法
有时您可能希望包含由 模板引擎,或在宏中包含大量HTML的较长数据。为了 这,将参数直接插入标记的语法 真的很管用,所以 {% use_macro some_macro_name "arg" kwarg_name="value" %},使用 语法如下:
{% macro_block some_macro_name %} {% macro_arg %} arg {% endmacro_arg %} {% macro_kwarg kwname %} value {% endmacro_kwarg %} {% endmacro_block %}
注意,使用这种语法,您不再需要引用 字符串/参数。如果你的论点又长又短, 您也可以同时使用这两种语法:
{% macro_block some_macro_name "arg1" kwname1="value1" %} {% macro_arg %} arg2 {% endmacro_arg %} {% macro_kwarg kwname2 %} value2 {% endmacro_kwarg %} {% endmacro_block %}
重复块使用:
文件开头包括:
{% load repeatedblocks %}
如果有要重复的块,而不是使用块 标记,使用重复块:
{% repeated_block some_block name %} ... ... ... {% endblock %}
稍后,当您想再次重复该块时,只需包含 重复标记:
{% repeat some_block name %}
因此,以下模板:
{% repeated_block title %}Repeated Block Tags{% endblock %} {% repeat title %}
渲染到:
Repeated Block Tags Repeated Block Tags
确保{% repeat ... %}标记在之后 {% repeated_block ... %} ... {% endblock %}标记。
它们是完全可继承的,重复继承的内容,应该可以工作 就像你期望的那样。
奖励内容!
重复块的设计说明。py:
使用“repeat_block”后跟“repeat”标记结构,而不是 为了重复普通的块标记,迫使开发人员 明确重复的内容。因此,它可以防止潜在的 在开发后期删除块标记 重复,稍后创建错误。因此,我们选择了这个设计 因为它更有利/Python在明确和干燥。
学分
宏标记基于最初由Michal Ludvig,michal@logix.cz编写的代码片段,后来进行了修改 对于由Skylar Saveland提供的args和kwargs。
代码由nicholas为django 1.6更新、修改和打包 劳里,在为kozbox, llc工作的时候。尼克也 将扩展语法添加到Mac你们。(p) (西班牙语)
推荐PyPI第三方库
- 热门话题
- java如何在JScrollPane标题中禁用鼠标滚轮滚动? java如何为篮球计分器应用程序存储包括球队名称在内的比赛分数? java如何使用ADT接口实例化列表 JavaCV抓取帧方法延迟并返回旧帧 java在上传文件时处理网络问题 java如何创建2d阵列的克隆? 关于XMLGregorianCalendar的java信息 java XmlUnit在比较XML文件时忽略元素的顺序 java如何最好地检测无意义的文本? 克隆如何制作java扫描仪的副本? 验证Java中空值的BigDecimal数据类型 java字符串数组中的字数 java JavaFX:如何选择平铺并添加数字和边框线? java更改jtable中从jar文件获取的特定行的颜色 正则表达式Java字符串。拆分:将\\W用作非单词分隔符时出现问题 当内存损坏时,Java中的同一引用/实例变量会发生什么变化? java无法在Javadoc注释中链接到JDK10