我正在django写一个简单的博客应用程序。包含在其中,我想在博客应用的所有页面上提供日期存档和标签云。但是,在项目的所有页面上都不需要这样做。
我相信使用上下文处理器会使这些项目的所有页面都可用吗?如果是这样的话,对于我需要的内容来说,这似乎有点过分,因为在与博客应用程序无关的页面上存在不需要的查询和额外的上下文变量。有没有更好的方法来解决这个问题?
答案 0 :(得分:2)
创建自定义模板标记,该标记将显示标记云等所需组件。请参阅the manual以获取参考:
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})
答案 1 :(得分:0)
我看到2个解决方案: 1)在上下文处理器中,您可以拥有请求对象,这样您就可以检查该URL是否在博客应用程序中。如果您在博客应用程序中,则会注入所需的数据
2)你可以创建一个上下文主持人,他注入一个仅在模板计算中计算所需数据的函数...
def mycontextpreprosessor(request):
def my_func_who_work_hard():
return range(10)
return {"cloud",my_func_who_work_hard}
在此示例中,仅当您的模板执行
时才会调用范围函数{{cloud}}
并将输出
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]