【问题标题】:Django access to language code in filter functionDjango 访问过滤函数中的语言代码
【发布时间】:2018-08-10 14:29:53
【问题描述】:

我在 django 模板中有一些项目列表,我循环遍历这个列表来构建一个我的记录表。 在其中一个字段中,我有一个字典键(从 1 到 12 的整数)。我编写了一个过滤器来更改关键整数以获得好看的名称。我想在过滤器返回之前检查当前用户语言是什么。 Django的filter/tag函数可以检查语言代码吗?

这是我在模板中的循环:

{% for field in fields_list %}
<div class="row row-eq-height">
    <div class="col-padding-5"><div class="cart-tab-row">{{ forloop.counter }}</div></div>
    <div class="col-padding-5"><div class="cart-tab-row">{{ field.field_name }}</div></div>
    <div class="col-padding-5"><div class="cart-tab-row">{{ trans field.c_type|get_cname }}</div></div>
    <div class="col-padding-5"><div class="cart-tab-row">{{ field.area|floatformat:2 }}</div></div>
    <div class="col-padding-5"><div class="cart-tab-row">{{ field.price|floatformat:2 }}</div></div>
</div>
{% endfor %}

这是我的过滤功能

@register.filter
def get_cname(key):
    ctype = CesTypesDict.objects.filter(id=key)[0]
    return ctype.english_type_name

在普通视图中,我从请求属性访问此信息,但在过滤器中,我无权访问请求对象。

【问题讨论】:

    标签: django python-3.x django-templates


    【解决方案1】:

    Django 通过get_language 函数使当前请求-响应周期的语言在全球范围内可用。所以你不需要请求对象:

    from django.utils.translation import get_language
    
    @register.filter
    def get_cname(key):
        # ...
        language_code = get_language()
        # do stuff with language_code
        return ...
    

    【讨论】:

    • 它对我有用 :) 但在我的情况下导入应该是django.utils.translation import get_language
    猜你喜欢
    • 1970-01-01
    • 2019-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    相关资源
    最近更新 更多