2014-02-10 2 views
1

Похоже, общее использование localflavor является импорт конкретной страны пакет:Джанго localflavor для международного сайта

from localflavor.nz.forms import NZRegionSelect

Что делать, если у меня есть сайт, который поддерживает несколько стран? Есть общий прокси, чтобы быть страной агностик, что-то вроде:

from localflavor.autodetect.forms import RegionSelect

+0

Один из вариантов заключается в том, чтобы импортировать по каким-либо критериям - например, настройки .. – karthikr

+0

@ karthikr это правильно, я думал об этом, но на данном этапе мы не уверены, есть ли у нас веб-серверы, основанные на местоположении. –

ответ

1

__import__ будет делать трюк:

def get_region_select(country_code): 
    module_path = 'django.contrib.localflavor.{}'.format(country_code) 
    try: 
     module = __import__(module_path, fromlist=['forms']) 
    except ImportError: 
     return None 

    fieldname = '{}RegionSelect'.format(country_code.upper()) 
    if hasattr(module.forms, fieldname): 
     return getattr(module.forms, fieldname)() 
    return None 

адаптировано из: http://codeinthehole.com/writing/validating-international-postcodes-in-django/

Затем в шаблоне вы 'll придется перезагружать страницу каждый раз, когда вы меняете страну, и делать что-то вроде этого на вид:

form.fields['region'].widget = get_region_select(country) 

Поскольку разные регионы будут иметь разные варианты.