2016-04-09 13 views
0

app.py app.py tarafından işlenmiş HTML şablondan, app.py tanımlanan bir işlev, çağırabilir nasıl ->Eğer şişenin üzerinde

def pretty_date(time=False): 
    from datetime import datetime 
    now = datetime.now() 
    if type(time) is int: 
     diff = now - datetime.fromtimestamp(time) 
    elif isinstance(time,datetime): 
     diff = now - time 
    elif not time: 
     diff = now - now 
    second_diff = diff.seconds 
    day_diff = diff.days 

    if day_diff < 0: 
     return '' 

    if day_diff == 0: 
     if second_diff < 10: 
      return "just now" 
     if second_diff < 60: 
      return str(second_diff) + " seconds ago" 
     if second_diff < 120: 
      return "a minute ago" 
     if second_diff < 3600: 
      return str(second_diff/60) + " minutes ago" 
     if second_diff < 7200: 
      return "an hour ago" 
     if second_diff < 86400: 
      return str(second_diff/3600) + " hours ago" 
    if day_diff == 1: 
     return "Yesterday" 
    if day_diff < 7: 
     return str(day_diff) + " days ago" 
    if day_diff < 31: 
     return str(day_diff/7) + " weeks ago" 
    if day_diff < 365: 
     return str(day_diff/30) + " months ago" 
    return str(day_diff/365) + " years ago" 

Ve HTML Template ->

{{pretty_date(post.time)}} 

bir hata

UndefinedError: 'pretty_date' is undefined

bunu sesli arama yapabilecek bir yolu var mı verir? Aynı app.py, html sayfası btw'yi oluşturur.

cevap

0

Yanılmıyorsam, HTML kodunuzda kullanmak istediğiniz herhangi bir şeyi (işlevler, değişkenler, vb.) Anahtar kelime argümanlarıyla render_template aramasında iletmeniz gerekir.

Örnek: render_template("main.html", pretty_date=pretty_date)

0

Sen jinja şablonlarınıza bunları genel olarak kullanılabilir hale getirmek için uygulama nesnesi işlevleri kayıt olabilirsiniz:

app = Flask(__name__) 

app.jinja_env.globals.update(pretty_date=pretty_date) 

Şimdi herhangi bir şablon {{ pretty_date() }} kullanabilirsiniz.

Aramanıza bir işlevi (veya başka bir nesne türünü) aramanız için render_template'a iletebilirsiniz, ancak bunun her görünüm için yapılması gerekir, bu nedenle birden çok şablondan aynı işlevi çağırmak istiyorsanız kayıt yaptırmanız daha iyi olur küresel olarak.