如何在Django模板中干燥常见文本?

如何在Django模板中干燥常见文本?,django,django-templates,Django,Django Templates,我有一些静态文本需要显示在模板中的两个位置 例如: <div> {% if something %} This is a static text {% else %} Something else happened {% endif %} </div> ... more html <span> {% if something %} This is a static text {% else %} Something else h

我有一些静态文本需要显示在模板中的两个位置

例如:

<div>
{% if something %}
    This is a static text
{% else %}
    Something else happened
{% endif %}
</div>
... more html
<span>
{% if something %}
    This is a static text
{% else %}
    Something else happend
{% endif %}
</span>

{%if某物%}
这是一个静态文本
{%else%}
发生了别的事
{%endif%}
... 更多html
{%if某物%}
这是一个静态文本
{%else%}
还发生了别的事
{%endif%}
  • 我可以通过在模板文件中的两个不同位置复制上面的文本(如上所示)来完成上述操作
  • 我还可以创建一个模型来存储文本(这是干的,但需要为一个简单的任务调用数据库)
  • 我正在考虑使用
    include template
    ,但这可能不是实现目标的最佳方式

  • 最好的方法是什么?

    我有一个类似文件的Java属性,用于所有资源字符串。我只要端上我想要的。把这些放在一个地方也能使翻译变得容易

    例:


    有几种方法,但这可能取决于文本内容和使用频率。没有完整的细节,很难推荐具体的选择

  • 创建一个解决方案(根据您对上述问题的描述,这个方案最有意义)
  • 创建一个基本模板,其中文本位于正确的位置,然后为“2个位置”继承该模板
  • 将静态文本放在设置文件中,并通过上下文将其传递给模板渲染器(可能不是最好的主意,但取决于您正在执行的操作)
  • 我用电脑来做那件事。因此,在我的应用程序/模板中,我只写密钥,而在.po文件中是密钥的值

    {% load i18n %}
    
    <div>
    {% if something %}
        {% trans "static" %}
    {% else %}
        {% trans "something else" %}
    {% endif %}
    </div>
    

    除了对多语言有用外,如果您将来想要更改它,它更容易进行复制写入,因为您可以只查看一个文件而不是浏览多个模板。

    您可以使用flatblocks:

    或块:

    对于您的问题来说,这些方法可能有些过分,因为它们将您的代码片段存储在数据库中,但它们增加了通过管理员编辑代码片段的好处

    {% load chunks %}
    <div>
    {% if something %}
        {% chunk "something" %} 
    {% else %}
        {% chunk "something_else" %}
    {% endif %}
    </div>
    
    {%loadchunks%}
    {%if某物%}
    {%chunk“某物”%}
    {%else%}
    {%chunk“something_other”%}
    {%endif%}
    
    有很多分叉或类似的项目,例如:


    明确使用包含标签:

    标记文件可以是超级简单的文本“This is a static text”或整个块:

    {% if something %}
    This is a static text
    {% else %}
    Something else happened
    {% endif %}
    

    “something”可以作为变量传递给模板标记,这样您就可以以变量的方式使用整个块。

    如果包含的文本变大,请使用“include”标记

    {%include“myapp/helptext.html”%}


    GrtzG

    使用
    include
    两次对我来说很好。我真的很高兴我发现了这一点;它似乎很有用。但我想知道为什么。似乎标准的
    {%include%}
    标记适用于我能想到的所有情况。有什么例子吗?
    {% load chunks %}
    <div>
    {% if something %}
        {% chunk "something" %} 
    {% else %}
        {% chunk "something_else" %}
    {% endif %}
    </div>
    
    {% if something %}
    This is a static text
    {% else %}
    Something else happened
    {% endif %}