【问题标题】:django: messages.add_message not displaying in html pagedjango:messages.add_message 未显示在 html 页面中
【发布时间】:2018-12-10 09:18:43
【问题描述】:

我有一个 Django 图书馆应用程序,其中我有一个 book_detail 页面,用户可以在其中下载/通过电子邮件将图书的 pdf 链接发送给自己。

在发送这样一封电子邮件(工作正常,正在接收电子邮件)时,我想在同一个 html 页面上显示弹出窗口或警告消息,而不是重定向到其他页面。

这里是views.py代码:

def send_email(request):

try:
    send_mail('Book request', 'email body', settings.EMAIL_HOST_USER, ['xyz@gmail.com'], fail_silently=False)

    #this message is not getting displayed in the same html page
    messages.add_message(request, messages.SUCCESS, 'Email sent successfully.')

except EmailMessage:
    messages.add_message(request, messages.SUCCESS, 'Error has occurred')

HTML 页面 book_detail.html 代码:

  ......
  rest of the code....

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

{% endblock %}

我使用提交按钮点击发送电子邮件:

urlpatterns = [
   path('', views.index, name='index'),
   ......
   path('email_book/', views.send_email, name='email_book'),
 ]

发生的错误:

请建议应该做什么,有没有其他解决方案我可以尝试在同一个 html 页面上显示警报框/消息,而不将其重定向到任何其他页面。

谢谢!

更新:

由于 book_detail.html 页面固有的复杂 url 路由,当我在其他一些 html 页面中使用它时,确实会显示 django 消息:

 def otherpage(request):
    ....
    messages.add_message(...)
    return render(request, 'other_page.html')

【问题讨论】:

    标签: django django-email


    【解决方案1】:

    Django 中的视图函数应该总是返回一些Response 对象

    def send_email(request):
    
      try:
        send_mail('Book request', 'email body', settings.EMAIL_HOST_USER, ['xyz@gmail.com'], fail_silently=False)
    
        #this message is not getting displayed in the same html page
        messages.add_message(request, messages.SUCCESS, 'Email sent successfully.')
    
      except smtplib.SMTPException:
        messages.add_message(request, messages.SUCCESS, 'Error has occurred')
      return render(request, 'book_detail.html', {
        'messages': messages,
      }, content_type='text/html')
    

    【讨论】:

    • 我已经包含了你的代码,它给了我以下错误:不允许捕获不继承自 BaseException 的类
    • @Simran 看起来您的异常 EmailMessage 没有继承自 Exception 类。这应该可以解决问题
    • 好的,我应该用什么异常类替换“EmailMessage”?尽管电子邮件正在正确发送/接收
    • @Simran 我也更新了代码,所以你需要为要查看消息的页面渲染自己的模板
    • @Simran 看看docs.djangoproject.com/en/2.1/topics/email/#send-mail,我会更新我的答案。
    猜你喜欢
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 2023-03-03
    • 2023-03-08
    相关资源
    最近更新 更多