gpt4 book ai didi

python - Django 1.8 : Message in Class-Based View Not Displayed

转载 作者:行者123 更新时间:2023-11-28 19:15:28 24 4
gpt4 key购买 nike

我正在使用 Django 1.8.6 (Python 3.5.0) 编写一个简单的网站来提供租赁服务。用户创建租金后(使用基于类的 CreateView ),用户将被重定向到租金的索引页面,其中应显示“成功”消息(索引模板继承自 base.html )。

我阅读了 Django 的 messages framework 文档和adding messages in class-based views的相关部分.

我在我的代码中添加了相关部分,但是创建租金后,消息没有显示。 <div id="messages"> (来自 base.html )以 HTML 呈现,但不显示任何消息(因为 success_message 未在 RentCreateView 中处理)。

我的设置:

settings.py(根据文档,Django 1.8 不需要额外设置):

...
INSTALLED_APPS = (
...
'django.contrib.sessions',
'django.contrib.messages',
'rental_service',
)
...
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
...
)
...
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

base.html(遍历消息):

...
<div id="messages">
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
...

rent_list.html(扩展 base.html):

{% extends "base.html" %}
...

views.py(使用 SuccessMessageMixin 提供的 success_message 属性):

class RentCreateView(CreateView, SuccessMessageMixin):
model = Rent
fields = [
"timestamp_rent",
"timestamp_return",
"customer",
"rental_examples"
]
template_name_suffix = "_create_form"
success_message = "Rent created successfully." # Ignored: even if "def get_success_message(self, cleaned_data): raise Exception()"

def form_valid(self, form):
form.instance.user = self.request.user
return super(RentCreateView, self).form_valid(form)

def get_success_url(self):
return reverse("rental_service:rent_index")

最佳答案

谢谢 dhke由于方法解析顺序问题,为我指明了正确的方向。

翻转继承顺序解决了问题:

views.py:

class RentCreateView(SuccessMessageMixin, CreateView):
...

顺便说一句:当 adding messages in class-based views 时,基类的顺序很重要,应该记录在案。 .

关于python - Django 1.8 : Message in Class-Based View Not Displayed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33982774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com