我正在用 django 编写一个简单的博客应用程序。其中包括,我想在博客应用程序的所有页面上提供日期存档和标签云。但是,项目的所有页面都不需要这样做。
我相信使用上下文处理器会使这些项目的所有页面都可用?如果是这样,这对于我需要的东西来说似乎有点矫枉过正,因为在与博客应用程序无关的页面上存在不需要的查询和额外的上下文变量。有没有更好的方法来解决这个问题?
创建自定义模板标签,该标签将显示所需的组件,如标签云。请参阅 手册以供参考:
from django import template
from django.template.loader import render_to_string
register = template.Library()
@register.simple_tag
def tag_cloud():
tags = ['foo', 'bar'] # Fetch the tag cloud data here
return render_to_string('tag_cloud_template.html', {'tags: tags})
我看到了 2 个解决方案:1)在上下文处理器中,您可以拥有请求对象,因此您可以检查 url 是否在博客应用程序中。如果您在博客应用程序中,则注入所需的数据
2)您可以创建一个上下文处理器,注入一个仅在模板计算中计算所需数据的函数......
def mycontextpreprosessor(request):
def my_func_who_work_hard():
return range(10)
return {"cloud",my_func_who_work_hard}
在此示例中,仅当您的模板执行时才会调用 range 函数
{{cloud}}
并将输出
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]