python - django 从主模板中的外部应用程序获取上下文

标签 python django

我已经整合了djangocms blog在我的项目中。在主页侧边栏中,我想显示最新的博客文章。问题是,我的主页是 django-cms 页面,我无法获取博客文章对象。网址.py:

urlpatterns = i18n_patterns('',
    url(r'^admin/', include(admin.site.urls)),
    .....
    url(r'djangocms_blog/', include('djangocms_blog.urls', namespace='djangocms_blog')),
    url(r'^', include('cms.urls')),

)

不知何故在 main.html 中我应该能够获取博客记录:

    {% extends "base.html" %} 
<nav class="secondary-menu">
                <ul class="nav">
                    <!-- i need display them here -->
                </ul>
            </nav>

有什么优雅的方法可以做到这一点吗?

最佳答案

使用 assignment_taginclusion_tag:

模板标签

# templatetags/blog_tags.py
from django import template
from djangocms_blog.models import Post

register = template.Library()

@register.assignment_tag()
def latest_posts_as(limit=5):
    return Post.objects.order_by('-date_published')[0:limit]

@register.inclusion_tag('latest_posts.html', takes_context=True)
def latest_posts_inline(context, limit=5):
    qs = Post.objects.order_by('-date_published')[0:limit]
    context.update({'posts': qs})
    return context

包含标签的片段

<!-- latest_posts.html -->
{% for post in posts %}
    <p>{{ post }}</p>
{% endfor %}

您的主页/任何模板

<!-- your_template.html -->
{% load  blog_tags %}
<div>

    <!-- using assignment_tag -->
    {% latest_posts_as limit=20 as posts %}
    {% for post in posts %}
        <p>{{ post }}</p>
    {% endfor %}

    <!-- using inclusion_tag -->
    {% latest_posts_inline limit=10 %}

</div>

limit 是可选的 - 但可能很方便:)

关于python - django 从主模板中的外部应用程序获取上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37896785/

相关文章:

python - Scrapy 和可用的可能性

python - 如何制作 django 模型 "commentable", "likeable"和 "rateable"

python - Django - 与模型无关的自定义管理页面

python - Django Twoscoops 和 SECRET_KEY 生成

使用 Python.h undefined symbol 的 C++ 编译

python - 如何将 JSON 数据格式化为包含逗号?

将文件内容发送到管道并一步计算 # 行的 Pythonic 方法

python - 在 Python 中绘制两个正弦曲线的总和

python - 接受额外字段的 Django 验证函数

python - 推荐使用 Django 的电子商务框架/产品?