为django模型提供国家字段。
django-countries的Python项目详细描述
安哥拉国家
一个django应用程序,提供用于表单、标志的国家/地区选择 图标静态文件,以及模型的国家字段。
- 安装
- 国家字段
- 定制表单
- 从python获取国家信息
- 模板标记
- 定制
- 自定义国家列表
- 先显示特定国家(地区)id="id22" rel="nofollow">先显示特定国家(地区)
- 自定义标志URL
- 单字段自定义
- 复杂字典格式
- django rest framework字段
- 休息输出格式
国家字段
Django模型的国家字段,提供所有ISO 3166-1国家 选择.
countryfield 基于django的 charfield ,提供了选择 对应于官方ISO 3166-1国家列表(默认 最大长度 共2个。
使用 countryfield考虑以下模型
fromdjango.dbimportmodelsfromdjango_countries.fieldsimportCountryFieldclassPerson(models.Model):name=models.CharField(max_length=100)country=CountryField()
任何 个人 实例都有一个 国家 属性,您可以使用该属性 获取此人所在国家的详细信息:
>>>person=Person(name='Chris',country='NZ')>>>person.countryCountry(code='NZ')>>>person.country.name'New Zealand'>>>person.country.flag'/static/flags/nz.gif'
这个对象( person.country 在示例中)是一个 country 实例, 如下所述。
使用空白标签设置初始空白选项的标签,如 表格:
country=CountryField(blank_label='(select country)')
多选
此字段还允许选择多个国家(另存为逗号 分开的字符串)。该字段将始终输出 模式。例如:
classIncident(models.Model):title=models.CharField(max_length=100)countries=CountryField(multiple=True)>>>forcountryinIncident.objects.get(title='Pavlova dispute').countries:...print(country.name)AustraliaNewZealand
国家对象
表示国家的对象,用两个字符实例化 国家代码、三字符代码或数字代码。
它可以与其他对象进行比较,就好像它是一个包含 国家代码,当作为文本计算时,返回国家代码。
< DL>输出将html元素显示为正确标志所需的css类 从包含所有标志的单个精灵图像中。例如:
<link rel="stylesheet" href="{%static'flags/sprite.css'%}"> <i class="{{country.flag_css}}"></i>
对于多个标志分辨率,请改用sprite hq.css并添加 flag2x , flag3x 或 flag4x 类。例如:
<link rel="stylesheet" href="{%static'flags/sprite-hq.css'%}"> Normal: <i class="{{country.flag_css}}"></i> Bigger: <i class="flag2x {{country.flag_css}}"></i>
您可能还想考虑使用aria标签来获得更好的 辅助功能:
<i class="{{country.flag_css}}" aria-label="{%blocktranswithcountry_code=country.code%}{{country_code}} flag {%endblocktrans%}"></i>
国家选择程序
包含一个小部件,可以在选择框之后显示标志图像 (选择更改时用javascript更新)。
当您创建表单时,可以像normal一样使用此自定义小部件:
fromdjango_countries.widgetsimportCountrySelectWidgetclassPersonForm(forms.ModelForm):classMeta:model=models.Personfields=('name','country')widgets={'country':CountrySelectWidget()}
将 layout 文本参数传递给小部件,以更改 标志和小部件。默认布局为:
'{widget}<img class="country-select-flag" id="{flag_id}" style="margin: 6px 4px 0" src="{country.flag}">'
自定义窗体
如果要在自定义表单中使用国家/地区,请使用模型字段的自定义 表单字段以确保国家/地区选项的可翻译字符串保留 延迟直到小部件呈现:
fromdjango.dbimportmodelsfromdjango_countries.fieldsimportCountryFieldclassPerson(models.Model):name=models.CharField(max_length=100)country=CountryField()0
对于非必需的表单字段,使用 countryfield(blank=true) ,以及 国家字段(空白"标签="(选择"国家" 项) 为 初始空白选项。
如果您使用 希望在选择框后显示标志图像。
从python获取国家信息
使用django_countries.countries对象实例作为iso的迭代器 3166-1国家代码和名称(按名称排序)。
例如:
fromdjango.dbimportmodelsfromdjango_countries.fieldsimportCountryFieldclassPerson(models.Model):name=models.CharField(max_length=100)country=CountryField()1
国家名称使用Django的标准翻译。 如果您想通过添加翻译来提供帮助,请访问 https://www.transifex.com/projects/p/django-countries/
模板标记
如果您的国家/地区代码存储在不同于国家/地区字段的位置 您可以使用模板标记来获取 country 对象,并可以访问所有 其属性:
fromdjango.dbimportmodelsfromdjango_countries.fieldsimportCountryFieldclassPerson(models.Model):name=models.CharField(max_length=100)country=CountryField()2
如果您需要一个国家列表,这里还有一个简单的标签:
fromdjango.dbimportmodelsfromdjango_countries.fieldsimportCountryFieldclassPerson(models.Model):name=models.CharField(max_length=100)country=CountryField()3
定制
自定义国家/地区列表
国家名称取自官方的ISO 3166-1列表。如果你的项目 需要使用替代名称,包括或排除特定的 然后,国家/地区使用 国家/地区覆盖设置。
覆盖默认值的名称字典。这些值还可以使用 复杂字典格式
请注意,您需要处理自定义国家/地区名称的翻译。
将一个国家的名称设置为 无 会将其从国家列表中排除。 例如:
fromdjango.dbimportmodelsfromdjango_countries.fieldsimportCountryFieldclassPerson(models.Model):name=models.CharField(max_length=100)country=CountryField()4
如果您有应该使用的国家的特定列表,请使用 仅限国家 :
fromdjango.dbimportmodelsfromdjango_countries.fieldsimportCountryFieldclassPerson(models.Model):name=models.CharField(max_length=100)country=CountryField()5
或者要指定您自己的国家/地区名称,请使用字典或双元组列表 (字符串项将使用标准国家/地区名称):
fromdjango.dbimportmodelsfromdjango_countries.fieldsimportCountryFieldclassPerson(models.Model):name=models.CharField(max_length=100)country=CountryField()6
首先显示某些国家
首先提供国家代码列表作为 国家设置,然后 将首先显示在国家列表中(按指定的顺序) 按字母数字排序的国家。
如果还想对这些初始国家进行排序,请设置 国家优先排序 设置为 真
默认情况下,在 字母数字排序列表。如果你想重复,设置 国家/地区优先重复设置为 真
最后,您可以选择使用空的 通过提供选项标签作为 国家/地区优先中断设置进行选择。
自定义标志URL
可以使用 国家标志url设置该标志的url 图像资源。默认为:
fromdjango.dbimportmodelsfromdjango_countries.fieldsimportCountryFieldclassPerson(models.Model):name=models.CharField(max_length=100)country=CountryField()7
URL可以是相对于静态URL设置的,也可以是绝对URL。
该位置使用python的字符串格式进行解析,并通过 以下参数:
< Buff行情>- 代码
- 代码_upper
例如: 国家标志url= 'flags/16x10/{code\u upper}.png'
不做任何检查以确保静态标志实际存在。
或者,您可以在特定的countryfield上指定不同的url
fromdjango.dbimportmodelsfromdjango_countries.fieldsimportCountryFieldclassPerson(models.Model):name=models.CharField(max_length=100)country=CountryField()8
单字段自定义
要自定义单个字段,而不是依赖于项目级设置, 创建一个覆盖设置的 国家 子类。
若要重写设置,请为该类指定一个与小写字母匹配的属性 不带 国家前缀的设置。
然后在一个字段中引用这个类。例如,这个 countryfield 使用仅包含八国集团成员国的自定义国家列表:
fromdjango.dbimportmodelsfromdjango_countries.fieldsimportCountryFieldclassPerson(models.Model):name=models.CharField(max_length=100)country=CountryField()9
复杂字典格式
对于 国家/地区和 国家/地区覆盖,您还可以提供 字典而不仅仅是国家名称的可翻译字符串。
字典中的选项是:
< DL>django rest框架
Django国家船舶使用 countryfieldmixin 与drf序列化程序兼容的模型字段。使用以下命令 与模型序列化程序混合:
>>>person=Person(name='Chris',country='NZ')>>>person.countryCountry(code='NZ')>>>person.country.name'New Zealand'>>>person.country.flag'/static/flags/nz.gif'0
这个mixin同时处理标准和多选项字段。
django rest framework字段
对于较低级别的使用(或不处理模型字段时),可以使用 包括 countryfield 序列化程序字段。例如:
>>>person=Person(name='Chris',country='NZ')>>>person.countryCountry(code='NZ')>>>person.country.name'New Zealand'>>>person.country.flag'/static/flags/nz.gif'1
您可以选择使用 countries 参数将字段实例化为 指定一个自定义的国家实例。
rest输出格式
默认情况下,该字段只输出国家代码。如果你愿意 有更详细的输出,用 country_dict=true初始化字段, 这将导致字段具有以下输出结构:
>>>person=Person(name='Chris',country='NZ')>>>person.countryCountry(code='NZ')>>>person.country.name'New Zealand'>>>person.country.flag'/static/flags/nz.gif'2
代码或这个dict输出结构都可以作为输入 与参数的值无关。
选项请求
当您针对资源请求选项时(使用drf 元数据支持 ) 这些国家将在答复中作为选择返回:
>>>person=Person(name='Chris',country='NZ')>>>person.countryCountry(code='NZ')>>>person.country.name'New Zealand'>>>person.country.flag'/static/flags/nz.gif'3