8

django_countries用来显示国家/地区列表。现在,我有一个要求,我需要根据国家/地区显示货币。挪威 - 挪威克朗、欧洲和非洲(英国除外) - 欧元、英国 - 英镑、美洲和亚洲 - 美元。

这可以通过 django_countries 项目实现吗?或者我可以使用python或django中的任何其他包吗?

也欢迎任何其他解决方案。

--------------- UPDATE ------------- 主要强调的是拿到手之后解决方案: Norway - NOK, Europe & Afrika (besides UK) - EUR, UK - GBP, AMERICAS & ASIA - USDs.

- - - - - - - - - - - - - - 解决方案 - - - - - - - - - - - ------------

我的解决方案很简单,当我意识到我无法获得任何 ISO 格式或包来获得我想要的东西时,我想编写自己的脚本。这只是一个基于条件的逻辑:

from incf.countryutils import transformations
def getCurrencyCode(self, countryCode):
        continent = transformations.cca_to_ctn(countryCode)
        # print continent
        if str(countryCode) == 'NO':
            return 'NOK'

        if str(countryCode) == 'GB':
            return 'GBP'

        if (continent == 'Europe') or (continent == 'Africa'):
            return 'EUR'

        return 'USD'

不知道这是否有效,想听听一些建议。

谢谢大家!

4

3 回答 3

15

有几个模块:

  • pycountry

    import pycountry
    
    country = pycountry.countries.get(name='Norway')
    currency = pycountry.currencies.get(numeric=country.numeric)
    
    print currency.alpha_3
    print currency.name
    

    印刷:

    NOK 
    Norwegian Krone
    
  • py-moneyed

    import moneyed
    
    country_name = 'France'
    
    for currency, data in moneyed.CURRENCIES.iteritems():
        if country_name.upper() in data.countries:
            print currency
            break
    

    印刷EUR

  • 蟒蛇钱

    import money
    
    country_name = 'France'
    
    for currency, data in money.CURRENCY.iteritems():
        if country_name.upper() in data.countries:
            print currency
            break
    

    印刷EUR

pycountry定期更新,py-moneyed看起来很棒,并且具有比 更多的功能python-moneypython-money而且现在没有维护。

希望有帮助。

于 2013-07-31T09:56:32.283 回答
3

django-countries只需为您提供一个与您的模型耦合的字段(以及带有标志图标的静态包)。该字段可以保存列表中的 2 个字符的 ISO,countries.py如果此列表是最新的(尚未检查),这很方便,因为它可以节省大量输入。

如果您希望创建一个包含易于实现的详细数据的模型,例如

class Country(models.Model):
    iso = CountryField()
    currency = # m2m, fk, char or int field with pre-defined 
               # choices or whatever suits you

>> obj = Country.objects.create(iso='NZ', currency='NZD')
>> obj.iso.code
u'NZ'
>> obj.get_iso_display()
u'New Zealand'
>> obj.currency
u'NZD'

预加载数据的示例脚本,稍后可以将其导出以创建夹具,这是管理示例数据的更好方法。

from django_countries.countries import COUNTRIES

for key in dict(COUNTRIES).keys():
    Country.objects.create(iso=key)
于 2013-07-31T09:44:26.477 回答
3

我刚刚发布了country-currencies,这是一个为您提供国家代码到货币的映射的模块。

>>> from country_currencies import get_by_country
>>> get_by_country('US')
('USD',)
>>> get_by_country('ZW')
('USD', 'ZAR', 'BWP', 'GBP', 'EUR')
于 2014-12-28T14:30:18.890 回答