获取高级自定义模板标记中的请求上下文

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取高级自定义模板标记中的请求上下文相关的知识,希望对你有一定的参考价值。

在Django中,简单和包含模板标签允许获取请求上下文

@register.simple_tag(takes_context=True)

custom template tags - inclusion tags的官方文档。

但是,对于自定义标签,我看不出这是如何完成的。

我想要做的是扩展i18n {% trans %}标签,在使用gettext之前首先在数据库中查找翻译。我需要从自定义模板标签访问request.Language

答案

Django doc of custom template tags,也可以添加takes_context海关标签

import datetime
from django import template

register = template.Library()


@register.simple_tag(takes_context=True)
def current_time(context, format_string):

    #use "context" variable here
    return datetime.datetime.now().strftime(format_string)

我不知道如何在这种特殊情况下覆盖现有标签:( 无论如何,我建议的是,创建一个simple_tag,它接受上下文并在标记内部执行逻辑并从DB返回翻译文本。如果它不在DB中,则返回布尔值False。现在在模板中,使用if标签检查这些东西。

from django import template

register = template.Library()


@register.simple_tag(takes_context=True)
def is_db_available(context):
    # access your context here and do the DB check and return the translation text or 'False'
    if translation_found_in_DB:
        return "Some translation text"
    return False

并在模板中

{% load custom_tags %}
{% load i18n %}
{% is_db_available as check %} 
{% if check %}  <!-- The if condition  -->
    {{ check }}
{% else %}
    {% trans "This is the title." %} <!-- Calling default trans tag  -->
{% endif %}

以上是关于获取高级自定义模板标记中的请求上下文的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段1——vue主模板

VSCode自定义代码片段(vue主模板)

VSCode自定义代码片段2——.vue文件的模板

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装