多模型语言python_模型和模板上的Django多语言

这篇博客讨论了如何在Django中处理多语言字段,通过创建一个名为`Country`的模型,包含了英语和西班牙语的国家名称。同时,作者实现了一个自定义模板标签`get_model_translate`,用于在模板中动态获取指定语言的字段值。在视图中,可以通过传递对象和字段名来使用这个标签,使得在模板中根据当前请求的语言环境显示对应的语言内容。
摘要由CSDN通过智能技术生成

我可以从特定的语言创建字段,因为我将只使用英语和西班牙语,而且非常简单class Country(models.Model):

name = models.CharField('Pais', max_length=80)

name_en = models.CharField('Country', max_length=80, blank=True, null=True)

class Meta:

verbose_name = 'Pais'

verbose_name_plural = 'Paises'

def __unicode__(self):

return self.name

我可以创建一个自定义模板标记,以提供所需的字段:@register.tag(name='get_model_translate')

def do_translation(parser, token):

try:

tag_name, o_model, field = token.split_contents()

except ValueError:

raise template.TemplateSintaxError(u'Los parámetros no son válidos')

return Translate(tag_name, o_model, field)

class Translate(template.Node):

def __init__(self, tag_name, o_model, field):

self.tag_name = tag_name

self.o_model = template.Variable(o_model)

self.field = field

def render(self, context):

lang_code = context.get('request').LANGUAGE_CODE

o_model = self.o_model.resolve(context)

try:

data = o_model.__getattribute__('%s_%s' % (self.field, lang_code))

except Exception, e:

try:

data = o_model.__getattribute__('%s' % self.field)

except Exception, e:

data = ''

return data

我可以将所需的数据从视图传递到模板response['country'] = Country.objects.get(pk=1)

我可以这样称呼它,因为我的请求上下文中有语言代码:{% get_model_translate country name %}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值