Hel*_*nar 5 django django-templates
似乎'with'标签如果在块之外声明它不起作用:
{% extends 'base.html' %}
{% with my_var=1 %}
{% block test1 %}
{{my_var}}
{% endblock %}
{% block test2 %}
{{my_var}}
{% endblock %}
{% endwith %}
Run Code Online (Sandbox Code Playgroud)
上面的模板只显示任何内容,因为my_var未在这些块中传递.我怎么能克服这个?
我通过使用 Tornado 和 Jinja2 来到 Django,并且由于无法设置变量而感到疯狂,这些变量(a)可以在模板(而不是视图)中定义,并且(b)可以在派生自的基本模板中使用。查看 django-libs 中的一小段四行代码,我能够构建出这样的效果良好的东西。以下是应出现在各个块中的标题字符串的示例。
settings.py——添加到模板(Django 1.10+)
TEMPLATES = {
...
builtins = ['mysite...wherever...templatetags',]
}
Run Code Online (Sandbox Code Playgroud)
mysite.whereever.templatetags.py
from django import template
register = template.Library()
@register.simple_tag(takes_context=True)
def setvar(context, key, value):
context.dicts[0][key] = value
return ''
Run Code Online (Sandbox Code Playgroud)
基本.html
{% block settings %}
{% comment %}
Put this at the TOP of the template before
any blocks that use variables.
{% endcomment %}
{% endblock settings %}
<html>
<head><title>{{title}}</title></head>
<body><h1>My Site: {{title}}</h1>
{% block body %}
{% endblock body %}
</body></html>
Run Code Online (Sandbox Code Playgroud)
menu.html——不在视图中设置“标题”的模板:
{% extends "base.html" %}
{% block settings %}
{{ block.super }} {% comment %}optional{% endcomment %}
{% setvar 'title' 'Menu' %}
{% endblock %}
{% block body %}
<ul><li>Fish</li><li>Steak</li></ul>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
现在,标题将出现在 HTML 中的两个位置,即使它是在派生模板中定义的,但出现在顶部模板中。
| 归档时间: |
|
| 查看次数: |
469 次 |
| 最近记录: |