E.g。如果我打印SEE HERE对象(我的意思是把{{my_fraction}}放在模板中)我希望它在分母= 1和分数(例如简单的a / b)的情况下打印为整数否则。
实现这一目标的最简单/最优雅的方法是什么?如果我使用{{object}}?
,我可以覆盖模板中呈现的内容吗?我知道我可以使用{%if%}语句,但这对我来说似乎非常不优雅(而且我的HTML代码也会一团糟)
答案 0 :(得分:2)
fractions.Fraction(1, 1)
在字符串上下文
>>> fractions.Fraction(1, 1).__str__()
'1'
>>> fractions.Fraction(1, 1).__unicode__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Fraction' object has no attribute '__unicode__'
>>> fractions.Fraction(1, 1).__repr__()
'Fraction(1, 1)'
>>> unicode(fractions.Fraction(1,1))
u'1'
>>> str(fractions.Fraction(1,1))
'1'
答案 1 :(得分:0)
当呈现对象时,Django模板只输出:
def __unicode__():
return "something arbitrary"
如果您特别想控制输出,则需要将其修补到对象上(不好主意)。相反,你应该使用过滤器,但是你得到{{object|format_fraction}}
。
@register.filter
def format_fraction(fraction):
fraction.numerator if fraction.denominator == 1 else fraction
另一种方法是,为了输出目的,将fraction对象继承到DjangoFraction
并覆盖__unicode__
,但这是一个糟糕的主意。
答案 2 :(得分:0)
您正在寻找django模板标签,有许多builtins但如果您想要特定的内容,您可以随时create custom one
答案 3 :(得分:0)
您可以使用custom template filter。
import UIKit
class YourCustomController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var numberField: UITextField!
private var formatter: NSNumberFormatter!
override func viewDidLoad() {
super.viewDidLoad()
numberField.delegate = self
// Initialize the formatter; minimum value is set to zero; style is Decimal.
formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
formatter.minimum = 0
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
// Combine the current text field value and the new string
// character. If it conforms to the formatter's settings then
// it is valid. If it doesn't then nil is returned and the
// string character should not be allowed in the text field.
return formatter.numberFromString("\(textField.text)\(string)") != nil
}
}
使用它:
# e.g. in my_app/templatetags/fraction_tags.py
@register.filter
def pretty_fraction(value):
if value.denominator == 1:
return unicode(value.numerator)
else:
return unicode(value)