首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用CBV在所有Django模板中创建侧栏?

问如何使用CBV在所有Django模板中创建侧栏?
EN

Stack Overflow用户
提问于 2015-02-04 11:54:27
回答 2查看 2K关注 0票数 1

我的问题是,我需要动态标签列表在我的所有网页和所有帖子(一个帖子)的内容也在该网页上。如何使用基于类的视图在所有页面上包括标记侧边栏?谢谢。

编辑:标签列表必须根据使用频率进行排序。我的代码:

代码语言:javascript
复制
class AllTagCloudView(ListView):
    model = Tag
    template_name = 'tag_cloud.html'
    context_object_name = 'tag_cloud'

    def get_queryset(self):
        qs = Tag.objects.values("name", "slug").annotate(Count("post")).order_by('-post__count')
        return qs

我试着用

代码语言:javascript
复制
@register.inclusion_tag('tag_cloud.html', takes_context=True)
def sidebar_sorted_tags(context):

但我不知道怎么做才能起作用。

此外,我还尝试使用{%包括'tag_cloud.html‘%}:

代码语言:javascript
复制
<div>
    <p>Tags</p>
    {% for tag in tag_cloud %}
        <ul>
            <li><a href="/tag/{{ tag.get_absolute_url }}">{{ tag.name }}</a></li>
        </ul>
    {% empty %}
        <a href="">There is no tags yet</a>
    {% endfor %}
</div>

我觉得这是愚蠢的或者我做错了什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-04 11:56:33

此任务与基于类的视图无关。您需要使用自定义包含模板标签。

代码语言:javascript
复制
@register.inclusion_tag('tag_cloud.html')
def sidebar_sorted_tags():
    return {'tag_cloud': Tag.objects.values("name", "slug")
                            .annotate(Count("post")).order_by('-post__count')}

现在在您的base.html模板中编写:

代码语言:javascript
复制
{% load my_tags %}

{% sidebar_sorted_tags %}
票数 1
EN

Stack Overflow用户

发布于 2015-02-04 12:07:21

您可以使用上下文处理器和全局基本模板,所有其他模板都将使用它们。此外,您还可以在模板标记中使用简单的包括,而不是全局基模板。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28320751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档