没有项目描述

django-template-block-args的Python项目详细描述


django_template_block_args

动机

此工具使标记的“组件化”更容易。具体来说,它使创建模板标记更容易,这些标记将blocks作为参数接收。

我们都编写了这样的对话框标记:

  <div class="dialog dialog-success">    <div class="dialog-success-icon"></div>    <div class="dialog-content">      Content goes here!    </div>  </div>

如果您不止一次地编写了此文档,则可能会尝试创建模板标记

# templatetags.py#...@register.inclusion_tag('alert.html')defdialog(type,content):return{"type":type,"content":content,}
<div class="dialog dialog-{{type}}>  <div class="dialog-{{type}}-icon">  </div>  <div class="dialog-content"> {{content}} </div></div>

这样您就可以简单地编写

{%dialog'success''Content goes here!'%}
在你的Django模板中,使它更具D.R.Y.这里的问题是你可以传递什么内容的灵活性。如果您想在对话框中添加标记,那么您将不得不在任何地方重复标记或在python字符串中组装标记并在其上调用mark_safe

用法

django_template_block_args通过允许您将整个模板块传递给一个助手来解决问题。它提供了两个功能,最简单的一个涵盖了大多数用例。它的行为非常类似于django的内置register.inclusion_tag。你可以把它们看作是django内置插件的扩展inclusion_tag

register_composed_template(register, template_name, [takes_context=False])

在上面的对话框示例中,我们可以将块作为参数传递:

# templatetags.pyfromdjango_template_block_argsimportregister_composed_template#...@register_composed_template(register,'alert.html')defdialog(type):return{"type":type,}
{%withvar=True%}{%dialog"success"%}  Content goes here! No need to escape <strong> HTML </strong>, you can use template tags, filters and even access the surrounding template's context. {%ifvar%}{%dialog"success"%} And recursion!  {%enddialog%}{%endif%}{%enddialog%}

注意,我们没有像第一个示例中那样传递或接收context参数。这是因为子块参数将作为content自动合并到目标模板的上下文中。请确保不要调用任何上下文变量内容,因为它们将被此默认值覆盖。

register_composed_template_with_blockargs(register, template_name, block_names, [takes_context=False])

register_composed_template只允许传递一个块,另一个函数允许传递multiple块并命名它们。

当您希望用多段文本填充模板时,这将变得非常有用。例如,我们可能有一个卡模板组件,其外观如下:

<div class="card card-{{type}}">{%ifcard_header%}    <div class="card-header">{{card_header}}    </div>{%endif%}  <div class="card-body">{{card_body}}  </div></div>

为了将块传递到card_headercard_footer,我们的python和consumer模板应该如下所示:

# templatetags.pyfromdjango_template_block_argsimportregister_composed_template#...@register_composed_template(register,'alert.html',block_names=("card_header","card_body"))defcard(type):# note that block-args automatically get passed to the templatereturn{"type":type}
{%card"success"%}{%blockarg'card_body'%}    I'm a card-body!{%endblockarg%}{%blockarg'card_header'%}    I'm a card-header!{%endblockarg%}{%enddialog%}

与第一个示例一样,页眉和页脚块也可以包含标记、模板标记和访问周围的上下文。

安装

pip install django-template-block-args

这个包由两个简单的函数组成,它们的依赖项是内置的django。所有您需要的是将这些函数导入到现有的TimePtAGS模块中。无需更改django设置模块中的任何内容。

开发

  1. 回购协议包含包的模块和一个示例django项目

贡献/下一步

  1. 编写测试
  2. 替换上述文档的简短示例列表
  3. 更好的错误信号
    • 确保人们避免在自定义标记与其块参数之间使用模板内容
    • 不应在函数中使用块名或内容

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaGWT:何时使用Lazydemelement?   Java中跟踪消失线程的多线程处理   java Springboot未能配置数据源:“url”,但我没有使用数据库   java为按钮生成随机位置   math Java:包含二项式系数计算的表达式   java通过AsyncTask传递参数   从路径错误创建java文件   高流量网站的性能播放框架、Java、Apache、PostgreSQL、JPA和Hibernate   java将4D矢量转换为长矢量   arraylist Java循环在没有任何错误的情况下终止   java正在制作一个计算器应用程序,希望在第二个片段中更新历史,但无法完成   java将信息从IntentService发送到Activity   java如何在游戏中插入大量实体!工作   javascript如何在ScriptEngineforJava中从数学中获得准确的结果?