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在明确和干燥。


热门话题
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