pla*_*rsh 0 django django-templates
我正在尝试使用简单标记将数组传递给我的模板.我在app/templatetags/pages_navigation.py下创建了我的模块,在我看来代码应该没问题:
from django import template
from pages.models import Page
register = template.Library()
@register.simple_tag(name='links')
def pages_navigation():
pages = Page.objects.all()
links = [['Events','/']]
for page in pages:
links.append([page.title, '/'+page.url])
return {'links':links}
Run Code Online (Sandbox Code Playgroud)
在我的模板中,我尝试访问这样的链接:
<ul>
{% if links %}
{% for link in links %}
<a href="{{link.1}}"><li>{{link.0}}</li></a>
{% endfor %}
{% else %}
<li>no pages found</li>
{% endif%}
</ul>
Run Code Online (Sandbox Code Playgroud)
然而,不知何故,似乎链接总是空的.当我在python shell中尝试pages_navigation方法时,它工作得很好..
是否有可能无法从简单的标记方法返回数组?
来自文档:
许多模板标签采用了许多参数 - 字符串或模板变量 - 并在进行一些处理后返回page_navigation
simple tags 用于打印一条信息,而不是将某些结果分配给变量(在您的情况下为列表)
因此,您最好使用包含标记:
@register.inclusion_tag('links.html')
def page_navigation(a, b, *args, **kwargs):
pages = Page.objects.all()
links = [['Events','/']]
for page in pages:
links.append([page.title, '/'+page.url])
return {'links':links}
Run Code Online (Sandbox Code Playgroud)
并links.html在模板目录中创建一个文件:
<ul>
{% if links %}
{% for link in links %}
<a href="{{link.1}}"><li>{{link.0}}</li></a>
{% endfor %}
{% else %}
<li>no pages found</li>
{% endif%}
</ul>
Run Code Online (Sandbox Code Playgroud)
在原始模板中,您可以包含以下内容:
{% load pages_navigation %}
{% page_navigation %}
Run Code Online (Sandbox Code Playgroud)
它将调用模板标记,呈现它并将其插入到模板中
| 归档时间: |
|
| 查看次数: |
2089 次 |
| 最近记录: |