如何在django模板中连接字符串?

Ahs*_*san 184 django django-templates

我想在django模板标签中连接字符串

{% extend shop/shop_name/base.html %}
Run Code Online (Sandbox Code Playgroud)

这里shop_name是我的变量,我想将其与路径的其余部分连接起来.
假设我有shop_name

我希望结果能够扩展 shop_name=example.com

Ste*_*ven 370

用于:

{% with "shop/"|add:shop_name|add:"/base.html" as template %}
{% include template %}
{% endwith %}
Run Code Online (Sandbox Code Playgroud)

  • 这可能有用,但不应被视为连接django模板中的字符串的一般答案.请参见http://stackoverflow.com/a/23783666/781695 (14认同)
  • 我完全对这个答案感到困惑,因为它使用include标签而不是extend标签,但显然它只是起作用.虽然我会推荐Ahsan自己的答案,因为它也有效,并且(在我看来)在语义上更正确并且引起更少的混淆. (2认同)

use*_*ser 99

不要add用于字符串,你应该定义一个这样的自定义标签:

创建一个文件: <appname>\templatetags\<appname>_extras.py

from django import template

register = template.Library()

@register.filter
def addstr(arg1, arg2):
    """concatenate arg1 & arg2"""
    return str(arg1) + str(arg2)
Run Code Online (Sandbox Code Playgroud)

然后使用它作为@Steven说

{% with "shop/"|addstr:shop_name|addstr:"/base.html" as template %}
    {% include template %}
{% endwith %}
Run Code Online (Sandbox Code Playgroud)

避免的原因 add

根据文件

此过滤器将首先尝试将两个值强制转换为整数...可以强制转换为整数的字符串将被求和,而不是连接 ...

如果两个变量都是整数,则结果将是意外的.

  • 这应该被标记为最佳答案,因为正确处理可以被Python强制为整数的值. (5认同)
  • 请记住将自定义过滤器加载到模板文件的顶部:`{%load &lt;appname&gt; _extras%}` (5认同)
  • 我不知道为什么你不是那个最"向上"的人,因为它是*你的*答案是对的,单独的"添加"只是不首先使用`str()`而且不起作用*对我来说完全*,而你的解决方案完美无瑕 (2认同)

Ahs*_*san 12

我更改了文件夹层次结构

/shop/shop_name/base.html /shop_name/shop/base.html

然后下面会工作.

{% extends shop_name|add:"/shop/base.html"%} 
Run Code Online (Sandbox Code Playgroud)

现在它能够扩展base.html页面.


Dav*_*ady 7

您不需要编写自定义标记。只需评估彼此相邻的变量即可。

"{{ shop name }}{{ other_path_var}}"
Run Code Online (Sandbox Code Playgroud)

  • 通常最简单的答案就是最好的答案。 (2认同)

小智 6

请参阅Django模板中的串联字符串

  1. 对于早期版本的Django:

    {{ "Mary had a little"|stringformat:"s lamb." }}

“玛丽有只小羊羔。”

  1. 其他:

    {{ "Mary had a little"|add:" lamb." }}

“玛丽有只小羊羔。”