我现在正在学习 Django,并且有一个简单的问题:如何在 Django 中处理额外的页面块(除了主要内容块)?
让我解释一下我的意思。假设我们有一个页面“/news/view/12”,它引用“news.views.view”视图函数。在这个页面上,我将有导航菜单、最近的博客文章、带有一些信息的页脚等块。换句话说 - 这些块将放置在网站的每个页面上。而且,当然,新闻项目的内容会有主要内容块。
在这个视图函数(“news.views.view”)中,我想要一个 Python 代码来准确地处理一条新闻的视图,而不是别的:
def view(request, id):
news_item = News.objects.get(pk=id)
return render(request, 'news/view.html', {"item" : news_item})
那么,我该如何处理其他块:为它们获取数据,然后将其分配给模板?
我的意思是 Django 中某处的 Python 代码,而不是模板及其继承(我对此了解得足够多)。
最流行和最方便的方法是最可观的:)
正如我所见,您无法理解我,让我向您展示我希望从您那里听到的解决方案。
第一个解决方案是使用装饰器函数:
@load_navigation
@load_recent_news
def view(request, id):
news_item = News.objects.get(pk=id)
return render(request, 'news/view.html', {"item" : news_item})
第二种方案是直接在模板中调用python函数:
{% block recent_news %}
{% call "news.views.recent_news" %}
{# this will call a python function which will return rendered template with recent news #}
{% endblock %}
第三种解决方案是使用 django 中间件。
但是,说实话,我不喜欢这些方法中的任何一种。相信django有更方便的实现方式。
先感谢您。