2011-04-09 61 views
0

我想知道如何在我的模板中复制几个字符串。具体来说,我正在寻找在我的页面顶部创建一个目录导航类型的链接,并将链接指向更远的内容(如http://www.google.com/transparencyreport/faq/)。我希望链接与下面的章节标题具有相同的文本。如何避免在我的Django模板中重复字符串?

我曾考虑过使用{%with%},但是必须在{%with}块中嵌套所有内容似乎很不方便。

Whats the best way to duplicate data in a django template?类似,但我没有在任何地方继承此模板,因此使用{%block%}并不是真正的选项。

回答

2

这看起来就像使用从视图传递的模板变量(例如{{ link_name }})的情况。

您也可以使用template inclusion tag,其中包含具有重复信息的其他模板。

+0

+1为包含 – 2011-04-09 11:08:44

+0

但这些只是短的字符串:单行节标题。为每个文件创建一个文件比复制更糟糕,我认为,所以这些静态字符串放在视图中。 – raylu 2011-04-09 21:17:09

+1

嗯。我明白你的意思。你可以使用类似于这个代码片段的模板标签:http://www.soyoucode.com/2011/set-variable-django-template,但我不确定以这种方式颠覆模板系统是个好主意。也许最好的办法是将你想要显示的字符串添加到某种类型的设置文件中作为常量,然后通过你的视图将它们传递给模板上下文。 – 2011-04-09 22:16:27

0

在您看来,您可能会破坏您的内容,因此可以单独访问头文件作为模板变量。你可能会存储与每一个标题为类型的字典列表相关的信息:

page_content = [ 
    { 
     'id':'header1', 
     'header': 'Text for Header 1' 
     'content' : 'Content Beneath header 1' 
    }, 
] 

然后,在你的模板,你可以像这样的东西生成您的目录:

{% for d in page_content %} 
    <a href="#{{ d.id }}">{{ d.header }}</a> 
{% endfor %} 

虽然内容你的页面看起来是这样的:

{% for d in page_content %} 
    <h1 id="#{{ d.id }}">{{ d.header }}</h1><p>{{ d.content }}</p> 
{% endfor %} 
+0

不幸的是,内容部分是巨大的。此外,他们只是不属于意见... – raylu 2011-04-11 08:04:46

+0

我(可能是错误地)认为将使用orm查询内容。因此,不是对内容进行硬编码,而是看起来像:“content = model_instance.content”。如果情况并非如此,这听起来像你可能会考虑包含标签的建议。 – 2011-05-14 02:55:55

相关问题