2016-08-26 27 views
-1

我正在創建一個變量queryset,然後將這些值傳遞給字典上下文變量。我能夠轉換日期,但我不知道如何將特定字段轉換爲貨幣(例如:1000美元而不是1000),甚至只是用逗號(1000而不是1000)人性化特定字段是我的代碼,從我的角度來看,兩種方法是一類的一部分:Python/Django轉換/人性化django視圖上的特定字典項目?

from datetime import date 

def get_context_data(self): 
    context = super(MyView, self).get_context_data() 
    context['myview_items'] = self.get_mymethod_items_context() 
    return context 

def get_mymethod_items_context(self): 
    context = {} 
    items = table.objects.values('date_begun', 'price', 'item_number') 

    context['items'] = items 
    context['headers'] = ['Date', 'Price', 'Item'] 
    context['fields'] = ['date_begun_date', 'price', 'item_number'] 
    return context 

我只想一個字段,轉換這正是我努力的價格領域做:

from django.contrib.humanize.templatetags.humanize import intcomma 
intcomma('price') 

IM如何創建表,模板在我的模板上添加標籤:

{% simple_table_print 'tableid1' 'Price Information' myview_items.items myview_items.fields myview_items.headers %} 
+0

你可以在這裏發佈你的模型嗎? – Av4t4r

+0

不確定模型的相關性,它們都是CharField類型 – Zorpho

+0

您打算如何使用'items' queryset?如果你想在模板中顯示它,你可以加載'{%load humanize%}'並使用像模板標籤那樣的'intcomma'。如果你想要一個格式化價格字段的查詢集,你需要使用'Func()'表達式(如果你的數據庫允許的話)。或者你可以在所有項目的for循環中應用'intcomma'函數。 –

回答

0

我會安裝humanize的應用程序,然後擴展其intcomma方法來創建自己的templatetag一個很簡單的例子:

from django import template 
from django.contrib.humanize.templatetags.humanize import intcomma 

register = template.Library() 

@register.filter 
def prepend_dollars(dollars): 
    if dollars: 
     dollars = round(float(dollars), 2) 
     return "$%s%s" % (intcomma(int(dollars)), ("%0.2f" % dollars)[-3:]) 
    else: 
     return '' 

首先加載customtags.py文件在您模板:

{% load customtags %} 

然後你就可以在你的模板中使用它:

{{ my_decimal_val | prepend_dollars }} 

希望它有幫助。

+0

我不想在模板上使用人性化,我想在它到達模板之前將它轉換爲視圖,因爲我將所有字段作爲字典調用到我的模板 – Zorpho

+0

您可以在您的python中調用prepend_dollars方法查看代碼,如果你不想在模板中使用它。 – user4426017

1

首先,如果可以的話,您應該使用decimal field作爲貨幣值。這不是一個Django約定,it's a general programming one;十進制類型可以爲有效的「貨幣」表示保留必要的精度。

正如the documentation指出的那樣,您必須安裝應用程序humanize,並在您的模板中使用{% load humanize %}加載它。請記住,它使用您的settings.py中提供適當的區域設置。

Here您在使用{% load humanize %}

+0

我之前使用過人性化,但我的模板設置的方式是人性化這適用於所有領域,我只想做到這一點來分辨領域。我會更新我的問題,以更多地解釋我的意思。 – Zorpho

0

通常這是一個付款處理器頭痛。但是,如果你想本地化你的幣值我建議喜歡某事:

使用'babel'應用爲基礎&實現以下過濾器:

from decimal import Decimal 
from decimal import InvalidOperation 

from babel.numbers import format_currency 
from django.utils.translation import get_language, to_locale 


@register.filter 
def currency_format(value, currency = 'USD'): 
    try: 
     value = Decimal(value) 
    except (TypeError, InvalidOperation): 
     return u''   

    kwargs = { 
     'currency': currency, 
     'locale': to_locale(get_language() or settings.LANGUAGE_CODE) 

    return format_currency(value, **kwargs) 

你可以使用它作爲一個過濾器或在您的直接致電currency_format()的意見。