我想在Django模板标签中连接一个字符串,比如:
{% extend shop/shop_name/base.html %}
这里shop_name是我的变量,我想将它与rest of path连接起来。
假设我有shop_name=example.com,我想要结果扩展shop/example.com/base.html。
我想在Django模板标签中连接一个字符串,比如:
{% extend shop/shop_name/base.html %}
这里shop_name是我的变量,我想将它与rest of path连接起来。
假设我有shop_name=example.com,我想要结果扩展shop/example.com/base.html。
当前回答
不要对字符串使用add,你应该这样定义一个自定义标签:
创建一个文件:<appname>\templatetags\<appname>_extra .py
from django import template
register = template.Library()
@register.filter
def addstr(arg1, arg2):
"""concatenate arg1 & arg2"""
return str(arg1) + str(arg2)
然后像@Steven说的那样使用它
{% load <appname>_extras %}
{% with "shop/"|addstr:shop_name|addstr:"/base.html" as template %}
{% include template %}
{% endwith %}
避免添加的原因:
根据文件
这个过滤器将首先尝试将两个值强制转换为整数… 可以强制转换为整数的字符串将被求和,而不是连接…
如果两个变量都是整数,结果就会出乎意料。
其他回答
Extends没有这种功能。要么将整个模板路径放在一个上下文变量中并使用它,要么复制现有模板标记并适当地修改它。
使用:
{% with "shop/"|add:shop_name|add:"/base.html" as template %}
{% include template %}
{% endwith %}
在我的情况下,我需要concatenate发送一个参数连接到simple_tag的字符串,我不需要与,这节省了2行:
{% method firstParam "stringSecondParam="|add:valueSecondParam thirdParam as result %} 在这种情况下,问题的解决方案将是:"string="|add:object
我已经更改了文件夹层次结构
/shop_name/shop/base.html
下面也可以。
{% extends shop_name|add:"/shop/base.html"%}
现在它能够扩展base.html页面。
在我的项目中,我是这样做的:
@register.simple_tag()
def format_string(string: str, *args: str) -> str:
"""
Adds [args] values to [string]
String format [string]: "Drew %s dad's %s dead."
Function call in template: {% format_string string "Dodd's" "dog's" %}
Result: "Drew Dodd's dad's dog's dead."
"""
return string % args
例如,在这里,你想要连接的字符串和参数可以来自视图。
在模板和使用你的案例:
{% format_string 'shop/%s/base.html' shop_name as template %}
{% include template %}
好的部分是format_string可以在模板中的任何类型的字符串格式化中重用