【问题标题】:How do I avoid duplicating strings in my Django templates?如何避免在我的 Django 模板中重复字符串?
【发布时间】:2011-08-02 00:12:06
【问题描述】:

我想知道如何在我的模板中复制一些字符串。具体来说,我希望在我的页面顶部创建一个目录类型的导航,其中包含指向更下方内容的锚链接(如http://www.google.com/transparencyreport/faq/)。我希望链接与更远的部分标题具有相同的文本。

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

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

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

    这似乎只是使用从视图传递的模板变量(例如{{ link_name }})的情况。

    您也可以使用template inclusion tag,其中包含另一个包含您的重复信息的模板。

    【讨论】:

    • 但这些只是短字符串:单行节标题。我认为,必须为每个文件创建一个文件比复制更糟糕,因此将这些静态字符串放入视图中也是如此。
    • 嗯。我明白你的意思。您可以使用类似于此 sn-p 的模板标记:soyoucode.com/2011/set-variable-django-template,但我不确定以这种方式颠覆模板系统是否是个好主意。也许最好的办法是将要显示的字符串作为常量添加到某种设置文件中,然后通过您的视图将它们传递给模板上下文。
    【解决方案2】:

    在您看来,您可能会分解您的内容,以便标题可以作为模板变量单独访问。您可以将与每个标头关联的信息存储为字典列表:

    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 %}
    

    【讨论】:

    • 不幸的是,内容部分很大。此外,它们只是不属于视图......
    • 我(可能是错误的)假设内容将使用 orm 进行查询。所以不是硬编码内容,它看起来像:“content = model_instance.content”。如果不是这种情况,听起来您可能会考虑包含标签建议。
    猜你喜欢
    • 2017-08-05
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 2015-02-19
    • 2021-08-11
    • 2011-07-01
    • 1970-01-01
    相关资源
    最近更新 更多