Rob*_*ant 1 django django-templates django-views
我有一个简单的 Django 网站,其中包含一个基本模板,然后是特定页面的各种模板。这非常适合应用品牌、风格等。
我的网站在概念上类似于 JIRA 之类的网站,其中每个视图都需要通过一个名为“项目”的总体变量来通知,用户可以从菜单栏中的下拉列表中进行选择。
菜单栏位于基本模板中。下拉列表将由数据库查询填充(获取与登录用户关联的所有项目)。我如何执行该查询并将数据发送到基本模板?我不想将相同的查询附加到使用模板的每个视图!
我决定使用模板标签。操作方法如下:
templatetags/文件夹。templatetags文件夹内,创建一个名为的空文件__init__.pytemplatetags文件夹内,为您的标签创建一个文件。我们将称之为menu_items.py这将是一个包含标签,这意味着它还需要一个模板文件。像这样设置:
from django import template
from relevant_app import ItemToDisplay
register = template.Library()
@register.inclusion_tag('relevant_app/menu_items.html', takes_context=True)
def menu_items(context):
return {'items': ItemsToDisplay.objects.all()}
Run Code Online (Sandbox Code Playgroud)menu_items.html在相关模板文件夹中创建模板文件(在本例中,在relevant_app项目中,它将是templates\relevant_app):
{% for item in items %}
<li><a href="{% url items item=item %}">{{ item.item_name }}</a></li>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)将模板标签添加到主模板中:
{% load menu_items %}
{# ... #}
{% menu_items %}
Run Code Online (Sandbox Code Playgroud)这似乎是 Django 的方式来做到这一点。标签类型看起来有点繁琐;我很难让他们全部接受上下文,所以我inclusion_tag现在只使用。
| 归档时间: |
|
| 查看次数: |
1013 次 |
| 最近记录: |