【问题标题】:Include template as verbatim逐字包含模板
【发布时间】:2013-06-16 06:29:50
【问题描述】:

我有一个模板,我正在插入包含标签:

{% include 'template.html' %}

在另一个地方,我希望它的内容显示为原始内容。我怎样才能做到这一点?

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    你可以试试这样的:

    page1.html

    {%with flag="norender" %}
        {% include "template.html" %}
    {%endwith%}
    

    模板.html

    {%if flag == "norender" %}
        {%verbatim%}
    {%endif%}
            {#your html #}
    {%if flag == "norender" %}
        {%endverbatim%}
    {%endif%}
    

    【讨论】:

    • 这行得通吗? {%endif%} 不是在第一字下面,没有if 对应部分吗?
    • 我得到了 {%endif%} 我的 stuf....{%if flag == "norender" %} 按照您的建议显示。这看起来是一种可能的方法,但模板标签不能直接解除,github.com/jrief/django-angular/blob/master/docs/…
    • 不幸的是,正如尤金所说,这个答案是不正确的。 {% verbatim %}{% endverbatim %} 之间的 django 标签被渲染,呃,逐字逐句。
    【解决方案2】:

    我最终创建了一个模板标签来执行此操作:

    from django import template
    from django.template.loader import get_template
    from django.utils.html import escape
    
    register = template.Library()
    
    @register.simple_tag()
    def verbatim_include(name):
        """
        Example: {% verbatim_include "weblog/post.html" %}
        """
        template = get_template(name)
        return escape(template.render())
    

    我不知道这是否是最好或最有效的方法,但它似乎对我有用(Django 1.11)。

    在我的主模板中,我将包含另一个这样的模板:

    <pre><code>{% verbatim_include 'my_template.html' %}</code></pre>
    

    如果my_template.html 是这样的:

    <b>This is my template</b>
    

    然后在浏览器中我会看到:

    <b>This is my template</b>
    

    而不是:

    这是我的模板

    【讨论】:

    • 我不得不摆脱escape(),但除此之外似乎效果很好。谢谢!
    • 有趣!我绝对需要escape()(现在是 Django 2.1)。
    【解决方案3】:

    在 Django 1.11 上测试:

    from django import template
    from django.template.loader import get_template
    from django.utils.safestring import mark_safe
    
    
    register = template.Library()
    
    
    @register.simple_tag
    def verbatim_include(name):
        """
        Example: {% verbatim_include "weblog/post.html" %}
        """
        template = get_template(name)
        source = template.template.source
        return mark_safe(source)
    

    【讨论】:

      猜你喜欢
      • 2012-08-15
      • 1970-01-01
      • 2012-12-25
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      相关资源
      最近更新 更多