【发布时间】:2020-08-15 23:47:03
【问题描述】:
我认为因为我在views.py 的模板中添加了marketing_message,这就是为什么我的上下文只在index.py 中显示消息... 我想在我的应用程序的每个页面中显示我的消息。
中间件.py
从 .models 导入 MarketingMessage from django.utils.deprecation import MiddlewareMixin
class DisplayMarketing(MiddlewareMixin):
def __init__(self, get_response):
self.get_response = get_response
def process_request(self, request):
print("something")
try:
request.session['marketing_message'] = MarketingMessage.objects.all()[0].message
except:
request.session['marketing_message'] = False
settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'marketing.middleware.DisplayMarketing',
]
在views.py中添加了
def index(request):
products = Product.objects.all()
marketing_message = MarketingMessage.objects.all()[0]
context = {'products':products,'marketing_message':marketing_message}
return render(request,'pro/index.html',context)
base.html
{% if marketing_message %}
<div class="alert alert-success alert-dismissible alert-top-message" role="alert">
<h3>
{{ marketing_message.message|safe }}
</h3>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
{% endif %}
index.html--
{% extends "pro/base.html" %}
{% load static %}
{% block head_title %}
Home||
{% endblock %}
{% block content %}
<div class="container">
<div class="row">
{% for product in products %}
<div class="col-sm-6 col-md-4">
<div class="thumbnail">
{% if product.productimage_set.all %}
{% for item in product.productimage_set.all %}
{% if item.featured %}
<div style="width:200px;
height:200px;
background-image:URL('{{ MEDIA_URL }}{{ item.image.url }}');
background-repeat:no-repeat;
background-size: cover;
background-position:center;
margin:0 auto;">
</div>
<!-- <img class="img-responsive" src="{{ MEDIA_URL }}{{ item.image.url }}" > -->
{% endif %}
{% endfor %}
{% else %}
<img src="{% static '/download.svg' %}" class="img-responsive" />
{% endif %}
<div class="caption">
<a href="{{ product.get_absolute_url }}"><h3>{{ product.title }}</h3></a>
<p>{{ product.description|truncatewords:15 }}</p>
<p><a href="{{ product.get_absolute_url }}" class="btn btn-primary" role="button">View</a> <a href="#" class="btn btn-default" role="button">Button</a></p>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock %}
【问题讨论】:
-
在基本 html request.session.marketing_message.message 或 request.session.marketing_message
-
@giveJob 先生,我试过了,但消息仍然只出现在 index.html 中
-
有问题的显示 index.html 可能是您没有从 base.html 正确继承模板
-
@giveJob 我添加了索引
-
这个 MarketingMessage.objects.get() 是什么
标签: django middleware