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

时间:2009-10-19 20:54:28

标签: django django-templates

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

例如:

<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>
  1. 我可以通过在我的模板文件中的两个不同位置复制上述文本来完成上述操作(如上所示)。
  2. 我还可以创建一个存储文本的模型(这是干的但是为了一个简单的任务需要调用DB)
  3. 我正在考虑使用include template,但这可能不是实现目标的最佳方式。
  4. 最好的方法是什么?

6 个答案:

答案 0 :(得分:7)

绝对使用包含标签:

http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#inclusion-tags

标签文件可以是超级简单的东西,就像文本“这是一个静态文本”或整个块一样:

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

“something”可以作为变量传递给模板标签,因此您可以以可变的方式使用整个块。

答案 1 :(得分:4)

我使用django internationalization来做到这一点。所以在我的应用程序/模板中我只写密钥,而在.po文件中是键的值。

{% load i18n %}

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

在我的.po文件中:

msgid "static"
msgstr "This is a static text"

msgid "something else"
msgstr "Something else happened

除了对多语言有用之外,复制写入更容易,以防你以后想要更改它,因为你可以只看一个文件而不是浏览几个模板。

答案 2 :(得分:2)

有几种方法,但可能取决于文本是什么以及使用频率。如果没有完整的细节,很难推荐一个特定的选择

  1. 创建一个custom template tag(根据您上面描述的问题,这个最有意义。)
  2. 创建一个基本模板,其中的文本位于正确的位置,然后为“2个位置”继承该文本
  3. 将静态文本放入设置文件中,并通过Context将其传递给模板渲染器(可能不是最好的想法,但取决于您正在做什么,这可能是一种可能性)

答案 3 :(得分:2)

您可以使用flatblocks:http://github.com/zerok/django-flatblocks

或块:http://code.google.com/p/django-chunks/

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

{% load chunks %}
<div>
{% if something %}
    {% chunk "something" %} 
{% else %}
    {% chunk "something_else" %}
{% endif %}
</div>

有很多叉子或类似的项目,例如:

答案 4 :(得分:0)

我有一个类似Java属性的文件,我用于所有资源字符串。我只是提供我想要的那个。将这些保存在一个地方也使翻译变得容易。

例:

welcome_msg="hello user!" 
thank_you="thank you" 
goodbye_msg="goodbye, " + thank_you

答案 5 :(得分:0)

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

  

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

GrtzG