获取高级自定义模板标记中的请求上下文
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自定义代码片段14——Vue的axios网络请求封装