django 的 view 如何携带通用数据?

django 的 view 如何携带通用数据?,第1张

django 的 view 如何携带通用数据?,第2张

各位大佬好,请教个 django 问题:

我有个需求是这样的,站点标题,版权信息等数据我是以配置的方式存到数据库的。

但是,每一个页面都需要这些配置数据。

我总不能每一个 view 都去写一遍获取配置信息的逻辑吧。

于是我就想抽取一个基类,基类里面写获取这些配置信息的逻辑。其他的 view 继承这个基类

但是问题来了,其他 view 继承后,在 render 的时候,也得写基类获取的变量。

假如以后我在基类中加了新变量,那么所有子类都得加新变量。有没有办法能够完全解耦呢?

谢谢大家~

谢谢大家的解答。 ----------------------- 以下是精选回复-----------------------

答:如果都需要做成基类了,你这个需求本身就不应该放在数据库里面,直接用模板的 include 功能就成了。
{% include 'xxxxx/footer.html' %}
把信息放在数据库也可以,做了后端 api,从数据库里面取信息加上 cache, 前端页面里面用 ajax 调用直接前端渲染。

退一万步非要有这个需要,不要做基类,可以把这些信息写成公用 MIXIN,每个 view 多重继承就可以了。
class SITE_INFO_MIXIN():
title ='xxxx'
copyright = 'xxxxx'

class myview(view, SITE_INFO_MIXIN):
答:写一个函数给 context 注入通用数据就行了?感觉没有必要继承类
答:也可以自定义模板标签,放到 base.html 里面,然后继承这个 base.html 也很方便
答:我认为最佳做法 Django 已经给我们演示了.
即通过配置模板的 context_processors.
比如 Django 默认模板配置的如下 :

```python
# https://docs.djangoproject.com/en/dev/ref/settings/#templates
TEMPLATES = [
{
"OPTIONS": {

"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.template.context_processors.i18n",
"django.template.context_processors.media",
"django.template.context_processors.static",
"django.template.context_processors.tz",
"django.contrib.messages.context_processors.messages",
],
},
},

```

这些 processor 其实就是一个函数 .返回你需要的对象即可.
比如 messages 这个的实现如下:

```python
from django.contrib.messages.api import get_messages
from django.contrib.messages.constants import DEFAULT_LEVELS


def messages(request):
"""
Return a lazy 'messages' context variable as well as
'DEFAULT_MESSAGE_LEVELS'.
"""
return {
'messages': get_messages(request),
'DEFAULT_MESSAGE_LEVELS': DEFAULT_LEVELS,
}


```

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » django 的 view 如何携带通用数据?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情