我有一个简单的Django应用程序用于杂志网站,侧边栏显示最近问题的链接。侧边栏是它自己的模板,然后我将其包含在其他页面中。我希望最近问题的Queryset成为侧边栏包含的一部分,而不是侧边栏显示在页面视图中。 (这既是为了避免重复,更重要的是,要使侧栏在没有视图的平面页面上起作用。)
这似乎应该是一个简单/常见的事情,但我找不到一个好方法来做到这一点。我查看了自定义模板标签,上下文管理器等,但我看到的所有选项都要返回字符串或字典,而不是查询集。所以我最终做了一个包含模板标签(下面的代码),基本上是为我想要显示的问题构建一个字典。它工作正常,但对我来说它看起来很笨拙和脆弱,它混合了逻辑和显示非常糟糕。
有更好的方法吗?
class Variantish[+T, +TVar <: Inv[T]](protected[this] var v: TVar)
答案 0 :(得分:1)
上下文处理器将是执行此操作的典型方法。
def recent_issues(request):
{'recent_issues': return Issue.objects.order_by('-issue_num')[1:6]}
将上下文处理器添加到TEMPLATES
设置后,您可以访问模板中的recent_issues
。
或者,如果您不希望为每个视图运行上下文处理器,则可以使用simple_tag
装饰器创建模板标记(在Django&lt; 1.9中使用赋值标记)。
@register.simple_tag
def recent_issues():
return Issue.objects.order_by('-issue_num')[1:6]
在模板中,使用标记将查询集分配给变量
{% recent_issues as recent_issues %}
您现在可以在模板中循环浏览recent_issues
。
答案 1 :(得分:0)
也许我不太了解你的问题,但你是否正在寻找这样的事情:
{% include "some_include_template.html" with some_list=some_list some_var=some_var %}