Python django获取字符串的第一部分
是否有一个简单的django标记来获取模板中字符串的前x个字符 在ModelInstance列表中,我想根据objectinstance的状态为每个objectinstance指定不同的符号。状态可以是“等待”、“成功”或“失败XXXX”,其中XXXX是错误代码 我想检查objectinstance.status的前5个字符是否为“error”,然后符号将为红色。然而,我如何才能做到这一点?在Python中,我可以使用objectinstance.status[:5] 使用我成功地通过以下“异常”连接实现了这一点,但是有没有像.left()或.right()这样简单的东西 你可以试试:Python django获取字符串的第一部分,python,django,Python,Django,是否有一个简单的django标记来获取模板中字符串的前x个字符 在ModelInstance列表中,我想根据objectinstance的状态为每个objectinstance指定不同的符号。状态可以是“等待”、“成功”或“失败XXXX”,其中XXXX是错误代码 我想检查objectinstance.status的前5个字符是否为“error”,然后符号将为红色。然而,我如何才能做到这一点?在Python中,我可以使用objectinstance.status[:5] 使用我成功地通过以下“异常
{% if run.status|truncatechars:5 == 'error...' %}
(见Django文件中的内容)
尽管我可能会说,总的来说,您不应该将这种逻辑放在Django模板(其他框架中的视图)中。您希望将其放入Django视图(其他framerworks中的控制器)。也就是说,在你看来,你会是这样的:
has_error = run.status.startswith('error')
确保已将has_错误传递给模板,并且:
{% if has_error %}
这可能需要更多的工作,但检测错误条件的逻辑可以在多个视图和模板之间共享,并且您可以将控制逻辑与视图逻辑分开。如果使用Django 1.4+,您可以使用标记,但它只能部分解决您的答案,并在最后添加省略号 唯一可行的方法是编写一个自定义过滤器,这是连接许多过滤器的一部分。以下是您可以自定义的初稿:
from django import template
from django.template.defaultfilters import stringfilter
register = template.Library()
@register.filter
@stringfilter
def slicestring(value, arg):
"""usage: "mylongstring"|slicestring:"2:4" """
els = map(int, arg.split(':'))
return value[els[0]:els[1]]
作为奖励,此过滤器允许您通过提供“切片字符串”作为参数,几乎完全模拟切片表示法。唯一的例外似乎是必须用[0:9]
替换的语法[:9]
,因此使用此参数:yourvariable| slicestring:“0:9”
旁注:由于您的问题是“获取字符串的第一部分”,我相信自定义筛选器可能是正确的答案,但是如果获取切片字符串的唯一原因是在if
语句中检查它的一部分,那么我必须同意Anton的意见:您应该将检查放在视图中,如果可能,不在模板内
from django import template
from django.template.defaultfilters import stringfilter
register = template.Library()
@register.filter
@stringfilter
def slicestring(value, arg):
"""usage: "mylongstring"|slicestring:"2:4" """
els = map(int, arg.split(':'))
return value[els[0]:els[1]]