abu*_*dis 10 django django-templates
我在这样的模板中有一个循环
{% spaceless %}
{% for lang_code, lang_name in LANGUAGES %}
    <link hreflang={{ lang_code }} href="http://example.com/
    {% if lang_code|length > 2 %}
        {{ some_path }}
    {% else %}
        {{ other_path }}
    {% endif %}
    ">
{% endfor %}
{% endspaceless %}
产生这样的东西
<link hreflang="en-gb" href="http://example.com/
    some_path/ 
    "><link hreflang="de" ...>
是否可以重写这段代码,以便将整个标记写在一行中?
<link hreflang="en-gb" href="http://example.com/some_path/">
<link hreflang="de" href="http://example.com/other_path/">
...
PS如果if/else子句延伸超过一行,则可以实现,但是该行变得不可读.
我需要相同的,因为我使用模板来生成电子邮件主题行(非HTML,因此{% spaceless %}没用).就我而言,模板采用了许多不同的案例,所有内容都必须在一行中写入超过500个字符.
所以在{% spaceless %}我的心态中,我写了自己的{% linebreakless %}:
import six
from django import template
from django.template.base import Node
from django.utils.functional import allow_lazy
register = template.Library()
@register.tag
def linebreakless(parser, token):
    nodelist = parser.parse(('endlinebreakless',))
    parser.delete_first_token()
    return LinebreaklessNode(nodelist)
class LinebreaklessNode(Node):
    def __init__(self, nodelist):
        self.nodelist = nodelist
    def render(self, context):
        strip_line_breaks = allow_lazy(lambda x: x.replace('\n', ''), six.text_type)
        return strip_line_breaks(self.nodelist.render(context).strip())
请注意它(故意!)保留除换行符之外的所有空格.
电子邮件模板的示例用法如下所示,假设上面的内容被加载到名为的模板标记模块中linebreakless.py:
{% load linebreakless %}{% linebreakless %}
{# Email subjects are (encoded) text, not HTML, so we don't need any autoescaping! #}
{% autoescape off %}
New Notification
 •
{% if flag %}
 about this
{% else %}
 about that
{% endif %}
!
{% endautoescape %}
{% endlinebreakless %}
请注意,{% linebreakless %}标记必须位于第一行(并且在{% load %}指令之后)以防止生成的文件中出现任何换行符.
该spaceless标签会删除 html 标签之间的空格,无法像您尝试的那样删除标签内的空格。
您可以通过将 if/else 子句放在一行上来防止换行,但正如您所说,这使得它难以阅读。这向我表明您试图在 Django 模板中做太多工作,并且应该在其他地方构建 url。
最简单的选择是(language_code, url) 在视图中构建一个标签列表,并在模板中循环遍历这些标签。
{% for lang_code, url in language_urls %}
    <link hreflang={{ lang_code }} href="{{ url }}">
{% endfor %}
如果在视图中执行此操作不方便,则有另外几个选项:
some_path和other_path是动态的)| 归档时间: | 
 | 
| 查看次数: | 5471 次 | 
| 最近记录: |