Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django获取字符串的第一部分_Python_Django - Fatal编程技术网

Python django获取字符串的第一部分

Python django获取字符串的第一部分,python,django,Python,Django,是否有一个简单的django标记来获取模板中字符串的前x个字符 在ModelInstance列表中,我想根据objectinstance的状态为每个objectinstance指定不同的符号。状态可以是“等待”、“成功”或“失败XXXX”,其中XXXX是错误代码 我想检查objectinstance.status的前5个字符是否为“error”,然后符号将为红色。然而,我如何才能做到这一点?在Python中,我可以使用objectinstance.status[:5] 使用我成功地通过以下“异常

是否有一个简单的django标记来获取模板中字符串的前x个字符

在ModelInstance列表中,我想根据objectinstance的状态为每个objectinstance指定不同的符号。状态可以是“等待”、“成功”或“失败XXXX”,其中XXXX是错误代码

我想检查objectinstance.status的前5个字符是否为“error”,然后符号将为红色。然而,我如何才能做到这一点?在Python中,我可以使用objectinstance.status[:5]

使用我成功地通过以下“异常”连接实现了这一点,但是有没有像.left()或.right()这样简单的东西

你可以试试:

{% 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]]