django里面template能定义变量么
答案:2 悬赏:10 手机版
解决时间 2021-03-04 21:26
- 提问者网友:凉末
- 2021-03-04 02:28
django里面template能定义变量么
最佳答案
- 五星知识达人网友:三千妖杀
- 2021-03-04 03:57
没有python本身那么方便的语句 需要自己在循环里加判断,比如这样: {% for item in list %} {% ifequal item var %} .... do somthing .... {% endifequel %} {% endfor %} 不过我还是建议尽量在模板里少做一些事情,模板毕竟不是用来提供计算...
全部回答
- 1楼网友:想偏头吻你
- 2021-03-04 05:32
django model中使用多语言支持的快速方法, 该方法通过建立自定义的template tag 选取model中重复的语言field来达到多语言显示的目的.
假设我们有这样一个models.py, 某一个model中包含多个重复的field, 每个重复的field都是用来保存其对应的显示语言:
class myobject(models.model):
name = models.charfield(max_length=50)
title_en = models.charfield(max_length=50)
title_es = models.charfield(max_length=100)
title_fr = models.charfield(max_length=100)
description_en = models.charfield(max_length=100)
description_es = models.charfield(max_length=100)
description_fr = models.charfield(max_length=100)
class myotherobject(models.model):
name = models.charfield(max_length=50)
content_en = models.charfield(max_length=200)
content_es = models.charfield(max_length=200)
content_fr = models.charfield(max_length=200)
注意, 我们将下划线和语言代码作为后缀放在对应的field后面, 这将作为一个语言的查找标记.
然后我们在settings.py中添加需要翻译的field名:
translation_fields = ('title', 'description', 'content')
在项目目录中添加templatetags目录(不要忘了怎家__init__.py), 并在其中建立lazy_tags.py:
from django import template
from settings import translation_fields
register = template.library()
class localizedcontent(template.node):
def __init__(self, model, language_code):
self.model = model
self.lang = language_code
def render(self, context):
model = template.resolve_variable(self.model, context)
lang = template.resolve_variable(self.lang, context)
for f in translation_fields:
try:
setattr(model, f, getattr(model, '%s_%s' % (f, lang)))
except attributeerror:
pass
return ''
@register.tag(name='get_localized_content')
def get_localized_content(parser, token):
bits = list(token.split_contents())
if len(bits) != 3:
raise template.templatesyntaxerror("'get_localized_content' tag takes exactly 2 arguments")
return localizedcontent(model=bits[1], language_code=bits[2])
为了在template中使用自定义的tag, 我们首先载入:
{% load lazy_tags %}
然后使用自定义tag, 传入object和语言代码, 取的翻译. 比如西班牙语:
{% get_localized_content object 'es' %}
此时, 如果没有语言代码传入, 那么无法使用obj.description调用某一个语言field. 所以我们配合django.core.context_processors.request, context processor一起使用:
template_context_processors = (
...
'django.core.context_processors.request',
)
我们就能在template中这样使用:
{% get_localized_content object request.language_code %}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯